Verificador de Códigos: CPF, ISBN-13 e Cartão de Crédito

Prof. Doherty Andrade -- www.metodosnumericos.com.br

Verifique a validade de CPF, ISBN-13 ou números de cartão usando os algoritmos apropriados.

Atenção: A validade não implica na existência do documento.
Formato: XXX.XXX.XXX-XX

Exemplos verificados para teste:

Como funciona a validação?

Validação de CPF

O CPF usa dois dígitos verificadores calculados com módulo 11:

Para um CPF no formato \( ABC.DEF.GHI-VW \):

1. Primeiro dígito verificador (\( V \)):

\[ \begin{aligned} S_1 &= 10 \times A + 9 \times B + 8 \times C + 7 \times D + 6 \times E + 5 \times F + 4 \times G + 3 \times H + 2 \times I \\ V &= \begin{cases} 0 & \text{se } S_1 \mod 11 < 2 \\ 11 - (S_1 \mod 11) & \text{caso contrário} \end{cases} \end{aligned} \]

2. Segundo dígito verificador (\( W \)):

\[ \begin{aligned} S_2 &= 11 \times A + 10 \times B + 9 \times C + 8 \times D + 7 \times E + 6 \times F + 5 \times G + 4 \times H + 3 \times I + 2 \times V \\ W &= \begin{cases} 0 & \text{se } S_2 \mod 11 < 2 \\ 11 - (S_2 \mod 11) & \text{caso contrário} \end{cases} \end{aligned} \]

Validação de ISBN-13

O ISBN-13 usa uma soma ponderada com pesos alternados de 1 e 3:

Para um ISBN-13 \( d_1d_2\ldots d_{13} \):

\[ S = 1 \times d_1 + 3 \times d_2 + 1 \times d_3 + 3 \times d_4 + \cdots + 1 \times d_{13} \]

O número é válido se:

\[ S \mod 10 = 0 \]

✓ Verificado: O dígito verificador (\( d_{13} \)) também participa do cálculo com peso 1. A validação considera todos os 13 dígitos.

Para calcular o dígito verificador (\( d_{13} \)) de um ISBN conhecido:

\[ d_{13} = (10 - (S' \mod 10)) \mod 10 \]

onde \( S' \) é a soma dos primeiros 12 dígitos com os pesos alternados.

Algoritmo de Luhn (Cartões)

Usado para validar números de cartão de crédito:

Para um número \( d_1d_2\ldots d_n \):

1. Começando da direita, dobrar cada segundo dígito

2. Se o resultado for maior que 9, subtrair 9

3. Somar todos os dígitos

O número é válido se:

\[ \text{Soma total} \mod 10 = 0 \]

Matematicamente:

\[ \sum_{i=1}^n \begin{cases} d_i & \text{se a posição de } d_i \text{ é ímpar da direita} \\ 2 \times d_i & \text{se a posição é par da direita e } 2 \times d_i \leq 9 \\ 2 \times d_i - 9 & \text{se a posição é par da direita e } 2 \times d_i > 9 \end{cases} \equiv 0 \mod 10 \]