Entendendo limites de validação e rangos numéricos
Ao trabalhar com formulários, APIs ou validações de dados, você vai se deparar com uma restrição simples: dois dígitos. O campo aceita apenas números entre 0 e 99. A primeira coisa que todo mundo pensa é que 99 é o maior valor possível, o que é correto, mas a forma como essa limitação aparece no dia a dia raramente é tratada com a devida atenção. Já vi desenvolvedores escreverem validações como `if (valor
= 99)` sem pensar no que acontece quando o usuário digita 100, 150 ou até um número negativo. O erro mais comum não é técnico, é conceitual: confundir "dois algarismos" com "número que tem dois dígitos". Isso faz toda a diferença quando você precisa validar entrada do usuário.
O maior numero formado por dois algarismo na prática
A resposta direta é 99. Mas o que acontece quando você implementa isso em código? Se você está usando JavaScript e recebe um input como string, algo como `parseInt("099")` pode retornar 99, mas `Number("99")` também funciona. A questão é que strings como "07" são interpretadas como 7, o que quebra a lógica de contagem de algarismos. Para validar corretamente, eu costumava usar uma regex antes de qualquer verificação numérica: `/^\d{1,2}$/`. Isso garante que o usuário digitou exatamente um ou dois dígitos, nada mais. Um problema específico que encontrei certa vez foi com um sistema legado em PHP que recebia valores de um formulário onde o campo era definido como ``. Parece inofensivo, até você perceber que o usuário poderia digitar espaços, letras ou caracteres especiais se o `maxlength` fosse removido por algum motivo. O backend estava validando com `intval()` e comparando com 99, mas `intval("99abc")` retorna 99, então o valor passava pela validação mesmo sendo inválido. A solução foi adicionar uma camada de sanitização com `filter_var($valor, FILTER_VALIDATE_INT, ["options" => ["min_range" => 0, "max_range" => 99]])` antes de qualquer outro processamento.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Outro ponto que as pessoas frequentemente esquecem é a questão da base numérica. Em sistemas que lidam com hexadecimais, BCD ou representações embarcadas, dois dígitos podem significar coisas diferentes. Um byte non-packed BCD armazena dois dígitos decimais e seu valor máximo é sim 99, mas se você estiver trabalhando com um nibble duplo em C, por exemplo, os limites são outros. Conheço casos em que engenheiros de firmware assumiram que dois dígitos significavam sempre base 10 e acabaram tendo overflow em displays de sete segmentos porque o microcontrolador estava interpretando os bits de forma errada. Se o seu sistema exige que o número tenha estritamente dois dígitos — ou seja, de 10 a 99 — a validação muda. Nesse caso, 99 continua sendo o maior, mas 0 a 9 também são válidos matematicamente como números de um dígito. Dependendo do contexto de negócio, aceitar 5 quando o requisito diz "dois algarismos" pode ser um bug. Eu resolvi isso criando uma função reutilizável que verifica tanto o rango numérico quanto o tamanho da string original, assim não depende do que o usuário vê na tela mas sim do que ele realmente enviou.
O limite de 99 também aparece frequentemente em tabelas de referência, códigos de produto, faixas de preços e IDs curtos. Nesses cenários, a limitação é intencional e funciona bem enquanto o volume de dados permanece baixo. Quando a tabela cresce e você precisa de mais combinações, aí sim você percebe que dois dígitos dão apenas 100 possibilidades — de 00 a 99 — o que não escala. A alternativa imediata é aumentar para três dígitos, o que expande o espaço para 1.000 valores, mas isso geralmente exige mudanças no banco de dados e nas interfaces que já exibem o campo com largura fixa. Em resumo, saber que 99 é o maior número de dois dígitos é trivial. O desafio real está em aplicar essa restrição corretamente em todos os pontos de entrada do sistema, pensando nos casos onde a validação parece funcionar mas falha silenciosamente.