Também disponível em: English · Español · Français · العربية
Validador de ISIN
Valide um ISIN pela ISO 6166, veja a aritmética por trás do dígito verificador e encontre a transposição que nenhum dígito verificador consegue detectar.
O que é um ISIN
Um ISIN é o código de doze caracteres que identifica um valor mobiliário específico no mundo inteiro. É definido pela ISO 6166 e tem três partes: um prefixo de duas letras, um número nacional de nove caracteres atribuído pela agência de codificação local e um único dígito verificador no fim.
O prefixo é quase sempre um código de país ISO 3166, então uma ação americana começa com US e uma britânica com GB. Há algumas exceções reservadas, e a importante é XS, usada para valores internacionais liquidados via Euroclear ou Clearstream. A maioria dos eurobônus carrega essa, de modo que qualquer validador que exija um país no prefixo está errado sobre uma fatia enorme do mercado.
O dígito verificador é o algoritmo de Luhn, o mesmo dos números de cartão. Só que ele não é aplicado ao ISIN como você o lê. Primeiro cada letra é trocada por dois dígitos, do A como 10 até o Z como 35, e a soma de Luhn corre sobre essa cadeia expandida. O US0378331005 da Apple vira 3028037833100 antes de qualquer soma acontecer, e é por isso que a conta nunca parece bater com o código à sua frente.
Como usar
- Cole ou digite o ISIN. Espaços, hifens e minúsculas não atrapalham. Doze caracteres é a única exigência.
- Leia o detalhamento. Ele identifica o prefixo, separa o número nacional e mostra a cadeia de dígitos expandida sobre a qual o dígito verificador é realmente calculado.
- Veja se o seu código tem um gêmeo. Se inverter as duas primeiras letras der outro prefixo real, a ferramenta mostra esse código, porque ele também é válido e nenhum dígito verificador do mundo vai dizer qual dos dois você queria.
A transposição que nunca pode ser pega
Um dígito verificador existe para pegar erros de digitação, e o erro mais comum é trocar dois caracteres vizinhos. O ISIN pega quase todos. Existe um tipo que ele não pega, e a falha é total, não ocasional.
Trocar duas letras vizinhas nunca muda o dígito verificador. Não é raro nem quase nunca: é nunca. Testamos mais de dezoito mil transposições entre letras e todas, sem exceção, produziram um código que continua válido. O motivo é aritmético. Luhn dobra um dígito a cada dois contando da direita, e uma letra ocupa exatamente duas posições depois de expandida. Mover um bloco de dois dígitos em duas posições deixa cada um dos seus dígitos do mesmo lado dessa alternância, então a contribuição dele para a soma não muda, então a soma não muda, então o dígito verificador não muda.
Agora repare onde ficam as letras. Os dois primeiros caracteres de todo ISIN são o prefixo de país, e são sempre letras. A única transposição a que esse esquema é estruturalmente cego está, portanto, na frente de todo código já emitido. E como 43 pares de códigos ISO 3166 são o inverso um do outro, o prefixo corrompido costuma nomear um país real em vez de parecer bobagem.
O exemplo trabalhado é um papel real. GB0002634946 é um instrumento britânico, e BG0002634946 são os mesmos dígitos sob o prefixo da Bulgária. Os dois passam. Espanha e Suécia fazem o mesmo, como ES e SE, e também Hong Kong e Camboja, Israel e Liechtenstein, Malta e Turcomenistão, Coreia do Norte e Paquistão. A lista completa está na tabela acima do artigo.
Vale ser preciso sobre o quanto isso é excepcional. Diante dos outros dígitos verificadores, o ISIN deixa passar apenas 1,90% das transposições entre dígitos, e são justamente as trocas de 0 e 9 que o algoritmo de Luhn sempre deixou escapar. Deixa passar cerca de 11% das trocas entre uma letra e um dígito, que movem os blocos um número ímpar de posições e por isso costumam mudar a soma. O caso letra com letra é o que chega a cem por cento.
Limites honestos e como isto foi conferido
Um dígito verificador que confere significa que os doze caracteres são coerentes entre si. Não significa que o papel exista, que seja negociável ou que o número nacional tenha sido emitido. Qualquer um constrói um ISIN bem formado em segundos, e esta página faz exatamente isso para os botões de exemplo. Aqui não se consulta registro nenhum, porque não existe um público e gratuito para consultar, e uma ferramenta que insinuasse o contrário estaria mentindo sobre o que sabe.
O dígito verificador também é mais fraco do que parece contra um único caractere errado: pega cerca de nove em dez e deixa o resto, o que é o comportamento normal de qualquer dígito único módulo dez, não um defeito próprio do ISIN.
A implementação está fixada em cinco ISINs publicados de três países em vez de em si mesma, e a tabela de países é o mesmo conjunto de dados ISO 3166 por trás da página de códigos de país deste site, então os prefixos aceitos aqui e os códigos listados lá não têm como divergir. São 910 verificações no total. O resultado letra com letra é conferido duas vezes, uma varrendo milhares de códigos gerados e outra como a álgebra que o obriga, e vem com um controle negativo: trocas entre letra e dígito são detectadas em cerca de 89% das vezes, sem o que a afirmação de que tudo se conserva valeria igualmente para uma função que ignorasse a entrada.
Uma armadilha que merece ser citada para quem for implementar por conta própria: é tentador alinhar a duplicação aos doze caracteres originais em vez de à cadeia expandida. Isso acerta com frequência suficiente para sobreviver a um teste superficial e discorda da norma em cerca de nove ISINs a cada dez.
Por que é grátis?
Isto são algumas dezenas de linhas de aritmética e uma tabela de consulta, rodando na aba que você já tem aberta. Nenhum servidor vê o código que você digita, então não há o que cobrar nem conta para criar.
Nada do que você digitar é enviado, guardado ou registrado. Carteiras e ordens são exatamente o tipo de coisa que se cola num validador, então isso merece ser dito com clareza em vez de presumido.