Subject: | test_cpf( 0 ) returns true |
Oi Adriano!
Antes de tudo, parabéns pelo Business::BR::* - acho que todo mundo que tem algum processamento de pessoa física ou jurídica em Perl no Brasil usa e ama esses módulos :)
Dito isso, acabei de esbarrar num probleminha aqui:
$ perl -MBusiness::BR::CPF=test_cpf -E 'say 42 if test_cpf(0)'
42
"0" não deveria ser um CPF válido, certo?
Tentando fazer um diagnóstico rápido, vi que a documentação sugere que um CPF correto tem sempre 11 dígitos. Se isso é realmente verdade, não acho que a test_cpf() deveria chamar o canon_cpf() como ela faz hoje. Até porque, como o canon_cpf() chama _canon_id() passando size => 11, a verificação de length() só vai falhar se o total de digitos for *maior* do que 11.
Se realmente um CPF só pode ter 11 caracteres, uma solução pode ser não usar a canon_cpf() dentro da test_cpf(), e sim um s/\D+//g seguido por uma validação de length($cpf) != 11. Parece bom?
Se há algum motivo especial pro canon_cpf() entrar que eu não saiba, aí de repente cabe uma nota nos "BUGS" ou "CAVEATS" de que (1) números serão expandidos para 11 dígitos com zeros à esquerda se tiverem menos de 11 dígitos; e (2) por conta disso, test_cpf(0) == verdadeiro. Assim evita qualquer surpresa :)
Espero ter ajudado - parabéns de novo! \o/
Abraço!