CPF Validação

Significado dos dígitos

Os dois últimos dígitos do CPF são números de verificação: seguem um algoritmo de módulo 11.

O dígito anterior (isto é, o terceiro dígito da direita para a esquerda) revela a unidade federativa em que a pessoa registrou-se pela primeira vez.

Assim, basta observar o dígito final antes do traço para descobrir sua origem.
   
    Segue a lista com todos os estados brasileiros:

    * 0 Rio Grande do Sul
    * 1 Distrito Federal, Goiás, Mato Grosso, Mato Grosso do Sul e Tocantins
    * 2 Amazonas, Pará, Roraima, Amapá, Acre e Rondônia
    * 3 Ceará, Maranhão e Piauí
    * 4 Paraíba, Pernambuco, Alagoas e Rio Grande do Norte
    * 5 Bahia e Sergipe
    * 6 Minas Gerais
    * 7 Rio de Janeiro e Espírito Santo
    * 8 São Paulo
    * 9 Paraná e Santa Catarina

    Exemplo: CPF XXX.XXX.XX"6"-YY    --  O número destacado (6) indica que a origem deste CPF é Minas Gerais, cujo código é "6".


 Significance of the digits

The last two digits are used to perform a mod 11 algorithm.

The previous digit (the third digit from right to left) reveals a federal unit in which the person was registered.

So just examine the digit before the final dash to discover its origin.

List of all the Brazilian state categories:

    * 0 Rio Grande do Sul
    * 1 Distrito Federal, Goiás, Mato Grosso, Mato Grosso do Sul and Tocantins
    * 2 Amazon, Para, Roraima, Amapá, Acre and Rondônia
    * 3 Ceará, Maranhão and Piauí
    * 4 Paraíba, Pernambuco, Alagoas and Rio Grande do Norte
    * 5 Bahia and Sergipe
    * 6 Minas Gerais
    * 7 Rio de Janeiro and Holy Spirit
    * 8 Sao Paulo
    * 9 Paraná and Santa Catarina

  Example: CPF xxx.xxx.xx "8"-Y  --  The highlighted number (8) indicates that the origin of this CPF is from Sao Paulo.


Algoritmo para a validação do CPF

Excellent clean Javascript String prototype for CPF validation from JSfromHell.com:

String.prototype.isCPF = function(){
    var c = this;
    if((c = c.replace(/[^\d]/g,"").split("")).length != 11) return false;
    if(new RegExp("^" + c[0] + "{11}$").test(c.join(""))) return false;
    for(var s = 10, n = 0, i = 0; s >= 2; n += c[i++] * s--);
    if(c[9] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    for(var s = 11, n = 0, i = 0; s >= 2; n += c[i++] * s--);
    if(c[10] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    return true;
};



Receita Federal

References