Pessoal, olha a vergonha!!!<br><br>Achei na Internet um verificador em Java de CPF ***E*** CGC/CNPJ com apenas 35 linhas, incluindo espaços e &quot;fecha-chaves&quot;. Procurando no CPAN, encontrei um módulo de verificação de CPF com 29 linhas (sem contar os espaços!) e um de CGC/CNPJ com 76 (!!!!) linhas, também sem contar os espaços...
<br><br>O que acham de fazermos uma versão mais eficiente (e de preferencia mais enxuta) desses verificadores em Perl, hein?!<br><br>Tá lançado o desafio (e possível golfe em paralelo) para a comunidade!!! O melhor código vai pro novo site, e de repente até pro CPAN!!!
<br><br>[]s<br><br>-b<br><br>Para os que ficaram interessados, os links para os módulos do CPAN (do Paul Hodel) estão em:<br><a href="http://search.cpan.org/%7Ehodel/Brasil-Checar-CPF-1.01a/Checar/CPF/CPF.pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://search.cpan.org/~hodel/Brasil-Checar-CPF-1.01a/Checar/CPF/CPF.pm
</a><br><a href="http://search.cpan.org/%7Ehodel/Brasil-Checar-CGC-1.01a/Checar/CGC/CGC.pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://search.cpan.org/~hodel/Brasil-Checar-CGC-1.01a/Checar/CGC/CGC.pm
</a><br><br>Antes de enviar esse email procurei um pouco mais pelo CPAN e encontrei os módulos do Adriano Ferreira, que parecem mais enxutos e podem ser vistos/usados em:
<br><a href="http://search.cpan.org/src/FERREIRA/Business-BR-Ids-0.00_16/lib/Business/BR/CPF.pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://search.cpan.org/src/FERREIRA/Business-BR-Ids-0.00_16/lib/Business/BR/CPF.pm
</a><br><a href="http://search.cpan.org/%7Eferreira/Business-BR-Ids-0.00_16/lib/Business/BR/CNPJ.pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://search.cpan.org/~ferreira/Business-BR-Ids-0.00_16/lib/Business/BR/CNPJ.pm</a><br><br>e o código em Java segue abaixo:<br>-----------8&lt;-----------<br>
public class CNP {<br>
&nbsp;&nbsp;&nbsp;private static final int[] pesoCPF = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};<br>
&nbsp;&nbsp;&nbsp;private static final int[] pesoCNPJ = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};<br>
<br>
&nbsp;&nbsp;&nbsp;private static int calcularDigito(String str, int[] peso) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int soma = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int indice=str.length()-1, digito; indice &gt;= 0; indice-- ) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digito = Integer.parseInt(str.substring(indice,indice+1));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soma += digito*peso[peso.length-str.length()+indice];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soma = 11 - soma % 11;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return soma &gt; 9 ? 0 : soma;<br>
&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;public static boolean isValidCPF(String cpf) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((cpf==null) || (cpf.length()!=11)) return false;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer digito1 = calcularDigito(cpf.substring(0,9), pesoCPF);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer digito2 = calcularDigito(cpf.substring(0,9) + digito1, pesoCPF);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cpf.equals(cpf.substring(0,9) + digito1.toString() + digito2.toString());<br>
&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;public static boolean isValidCNPJ(String cnpj) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((cnpj==null)||(cnpj.length()!=14)) return false;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer digito1 = calcularDigito(cnpj.substring(0,12), pesoCNPJ);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer digito2 = calcularDigito(cnpj.substring(0,12) + digito1, pesoCNPJ);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cnpj.equals(cnpj.substring(0,12) + digito1.toString() + digito2.toString());<br>
&nbsp;&nbsp;&nbsp;}<br>
<br>
&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.printf(&quot;CPF Valido:%s \n&quot;, CNP.isValidCPF(&quot;01115375502&quot;)); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.printf(&quot;CNPJ Valido:%s \n&quot;, CNP.isValidCNPJ(&quot;13642634756318&quot;)); <br>
&nbsp;&nbsp;&nbsp;}<br>
}<br>------------8&lt;-----------------<br>