Introduction
Este documento descreve identificadores inteligentes, que são padrões integrados de verificação de conteúdo que detectam determinados tipos de dados. Para esta versão, o sistema implementará identificadores inteligentes para números de cartão de crédito, números de previdência social dos EUA, números CUSIP e números de roteamento ABA.
Internamente, um identificador inteligente consiste em uma expressão regular que corresponde a strings de candidatos, juntamente com uma função de validação que verifica a correspondência do candidato de alguma forma. Por exemplo, a função de validação de um número de cartão de crédito garante que o dígito de verificação esteja correto.
As expressões regulares para cada identificador inteligente incluirão âncoras de limite de palavra ('b') em ambas as extremidades. (Isso evita que o sistema corresponda a um número de previdência social dos EUA, por exemplo, no meio de uma sequência mais longa de dígitos.) Para simplificar, eles são omitidos das descrições abaixo.
A implementação dos identificadores inteligentes deve ser cuidadosa com relação às correspondências sobrepostas, pois uma subcadeia encontrada pela expressão regular pode não ser validada. Por exemplo, um filtro está procurando números de cartão de crédito na string 9999 4321 999 999 999 995 1234 5678 9000 deve encontrar o número de cartão de crédito válido 4321 999999 995, mesmo que uma simples pesquisa de expressões regulares para possíveis números encontrasse 9999 4321 9999 999 e 9995 1234 5678 9000.
Números de cartão de crédito
Um número de cartão de crédito começa com um tipo de cartão de comprimento variável, que indica se o número é um VISA, MasterCard, AMEX, etc., e termina com um dígito de verificação. Diferentes tipos de placa usam números diferentes de dígitos no número inteiro, mas o cálculo do dígito de verificação é o mesmo em cada caso.
Observe que as placas enRoute ou JCB não correspondem. Além disso, os números de VISA de 13 dígitos não existem e não serão correspondentes em nossa implementação.
Os números de cartão de crédito de 16 dígitos corresponderão a uma das seguintes expressões regulares:
[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}
[0-9]{4}\.[0-9]{4}\.[0-9]{4}\.[0-9]{4}
[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}
[0-9]{16}
Com o prefixo "4", "51" a "55" ou "6011".
Os números AMEX de 15 dígitos corresponderão a uma das seguintes expressões regulares:
[0-9]{4}-[0-9]{6}-[0-9]{5}
[0-9]{4}\.[0-9]{6}\.[0-9]{5}
[0-9]{4} [0-9]{6} [0-9]{5}
[0-9]{15}
Com os prefixos permitidos sendo "34" ou "37".
Os números do Diners Club de 14 dígitos corresponderão a uma das seguintes expressões regulares:
[0-9]{4}-[0-9]{6}-[0-9]{4}
[0-9]{4}\.[0-9]{6}\.[0-9]{4}
[0-9]{4} [0-9]{6} [0-9]{4}
[0-9]{14}
Com os prefixos permitidos "300" a "305", "36" ou "38".
Observe que as expressões regulares definem um agrupamento específico de dígitos para um determinado comprimento de cartão de crédito e que, se houver pontuação entre os dígitos, ele deve ser o mesmo em todo o lado.
O dígito final em um número de cartão de crédito é um dígito de verificação criado com o algoritmo Luhn. Trabalhando na extremidade direita do número, dobre cada segundo dígito. Em seguida, adicione os dígitos individuais dos números resultantes (os que foram duplicados e os que não foram). Se o resultado for um múltiplo de 10, o número é válido.
Por exemplo, dado o número 1234 5678 9012 3456:
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
Duplo: 2 2 6 4 10 6 14 8 18 0 2 2 6 4 10 6
Adicionando 2 + 2 + 6 + 4 + 1 + 0 ... + 1 + 0 + 6 dá 64, que não é um múltiplo de 10, portanto o número é inválido.
Dado o número 1234 5678 9876 3333:
1 2 3 4 5 6 7 8 9 8 7 6 3 3 3
Duplo: 2 2 6 4 10 6 14 8 18 8 14 6 3 6 3
Adicionando 2 + 2 + 6 + 4 + 1 + 0 ... + 6 + 3 dá 80, que é um múltiplo de 10, então o número é válido.
Números de previdência social dos EUA
Os números da previdência social são divididos em um número de área de 3 dígitos, que é atribuído geograficamente, um número de grupo de 2 dígitos atribuído em uma determinada ordem dentro de uma área, e um número de série de 4 dígitos atribuído sequencialmente.
Nossa implementação usará as seguintes expressões regulares:
[0-9]{3}-[0-9]{2}-[0-9]{4}
[0-9]{3}\.[0-9]{2}\.[0-9]{4}
[0-9]{3} [0-9]{2} [0-9]{4}
Aqui estão alguns exemplos das expressões acima:
555-55-5555
555.55.5555
555 55 5555
A Administração da Segurança Social mantém uma lista dos números de área/grupo atribuídos: NSS emitida [3]. Mas como este documento muda periodicamente, não podemos confiar nele para validação. A função de validação verificará se nenhum dos 3 campos é zero e se os 3 primeiros dígitos são menores que 800. (A referência anterior usa 771 como limite, mas o SSA já atribuiu números com os primeiros 3 dígitos 771 e 772.)
(Os números que começam com 666 não são atribuídos e os números no intervalo 987-65-4320 a 987-65-4329 são reservados para publicidade. Além disso, 078-05-1120 é o SSN mais utilizado; era o SSN real de uma secretária em uma empresa de carteira, que usava o número como exemplo.)
Números CUSIP
Os números do CUSIP (Committee on Uniform Security Identification Procedures) são 9 identificadores alfanuméricos que identificam títulos norte-americanos de vários tipos. O número divide-se num número de emitente de 6 caracteres, que identifica exclusivamente o emitente (por exemplo, uma empresa), um sufixo de 2 caracteres que identifica o título específico; por exemplo, ações comuns, em comparação com ações preferenciais e opções e instrumentos de rendimento fixo.
O código do identificador inteligente CUSIP usará as seguintes expressões regulares:
[0-9]{3}[0-9a-zA-Z]{3} [0-9a-zA-Z]{2} [0-9]
[0-9]{3}[0-9a-zA-Z]{3}-[0-9a-zA-Z]{2}-[0-9]
[0-9]{3}[0-9a-zA-Z]{3}[0-9a-zA-Z]{2}[0-9]
A função de validação é semelhante à usada para números de cartão de crédito. A única diferença é que as letras no número do CUSIP são convertidas em um valor numérico atribuindo A=10, B=11, ..., Z=35.
Um exemplo do site cusip.com usa o número 392690 QT 3 do CUSIP:
3 9 2 6 9 0 T 3
Converter letras: 3 9 2 6 9 0 26 29 3
Duplo: 3 18 2 12 9 0 26 58 3
Adicionando 3 + 1 + 8 + 2 + 1 + 2 + ... + 5 + 8 + 3 dá 50, que é um múltiplo de 10, portanto o número original era válido.
Números de roteamento ABA
Um número de roteamento ABA (American Banking Association) é um valor de 9 dígitos. Os primeiros 4 dígitos são o símbolo de roteamento da Reserva Federal, os próximos 4 o identificador da instituição e o último um dígito de verificação.
O código de identificador inteligente do número de roteamento ABA usará as seguintes expressões regulares:
[0-9]{4} [0-9]{4} [0-9]
[0-9]{4}-[0-9]{4}-[0-9]
[0-9]{9}
A função de validação implicava a multiplicação de cada dígito por 3, 7, 1, ...; se a soma dos produtos for um múltiplo de 10, o número é válido.
Por exemplo, considere o número 123 456 789:
1 2 3 4 5 6 7 8 9
Multiplicar por: 3 7 1 3 7 1 3 7 1
Produto: 3 14 3 12 35 6 21 56 9
Adicionar 3 + 14 + 3 + 12 + 35 + 6 + 21 + 56 + 9 dá 159, que não é um múltiplo de 10, portanto o número original é inválido.
Dado o número 322 271 627:
3 2 2 7 1 6 2 7
Multiplicar por: 3 7 1 3 7 1 3 7 1
Produto: 9 14 2 6 49 1 18 14 7
A adição de 9 + 14 + 2 + 6 + 49 + 1 + 18 + 14 + 7 dá 120, que é um múltiplo de 10, pelo que o número original era válido.
(Embora determinados intervalos de símbolos de roteamento da Reserva Federal sejam reservados e, portanto, não atribuídos, o algoritmo de validação não verificará se há números reservados, para evitar ter que revisá-los se o ABA alterar sua política.)