Como validar um IMEI: algoritmo de Luhn explicado
Verifique o formato de 15 dígitos e a soma Luhn com um exemplo e vetores QA. Este teste não verifica atribuição, propriedade nem lista negra.
Neste guia, "válido" significa que um candidato contém 15 dígitos e o último coincide com a soma de verificação Luhn dos primeiros 14. Isso não estabelece atribuição, propriedade, desbloqueio, modelo nem estado em lista negra.
O cálculo detalhado e o validador de IMEI testam apenas esse contrato de formato.
O que "válido" realmente significa
Um IMEI passa na validação quando satisfaz três condições:
- Comprimento — um candidato IMEI tem exatamente 15 dígitos. IMEISV é um identificador separado de 16 dígitos com dois dígitos de versão de software no lugar do dígito verificador IMEI.
- Caracteres — após normalizar os separadores permitidos, restam apenas dígitos
0–9. - Soma de verificação — o último dígito (dígito 15) coincide com o valor que o algoritmo de Luhn calcula a partir dos primeiros 14 dígitos.
O dígito verificador é derivado dos demais. Luhn detecta qualquer substituição de um dígito e a maioria das transposições adjacentes, mas é uma soma de verificação para detectar erros, não uma prova de identidade.
Passar no Luhn não prova que o identificador foi atribuído, pertence ao telefone apresentado ou consta de uma lista negra. Para fontes de situação, consulte o guia de verificação de IMEI na lista negra.
A forma mais rápida: usar um validador
Se você só precisa de uma resposta de sim ou não, pule a matemática:
- Abra o validador de IMEI.
- Cole o número de 15 dígitos (espaços e hífens são removidos automaticamente).
- Leia o resultado — válido ou inválido — junto com um detalhamento do TAC, do número de série e do dígito verificador.
Essa abordagem é adequada para verificações pontuais, inclusive por usuários não técnicos. Entender o cálculo também ajuda a identificar dados incorretos.
O algoritmo de Luhn, passo a passo
Luhn é uma soma de verificação de módulo 10 usada para IMEIs e outros identificadores. Para um candidato IMEI de 15 dígitos, aplique este procedimento.
Passo 1 — Pegue os primeiros 14 dígitos
O 15º dígito é o dígito verificador; você o comparará no final. Trabalhe com os dígitos de 1 a 14.
Passo 2 — Dobre um dígito a cada dois
Começando pelo dígito mais à direita desses 14 e seguindo para a esquerda, dobre um dígito a cada dois. (De forma equivalente, dobre os dígitos nas posições pares contando a partir da esquerda.)
Passo 3 — Reduza os resultados de dois dígitos
Se a duplicação produzir um número maior que 9, subtraia 9 (ou some os dois dígitos entre si — mesmo resultado). Assim 12 vira 3, 16 vira 7, 10 vira 1.
Passo 4 — Some tudo
Some todos os dígitos processados: os dobrados e reduzidos mais os que ficaram intactos.
Passo 5 — Calcule o dígito verificador
Encontre o próximo múltiplo de 10 igual ou superior à sua soma e, em seguida, subtraia a soma. Esse resultado é o dígito verificador esperado. Se ele for igual ao 15º dígito do seu IMEI, o número é válido. Se o total já for um múltiplo de 10, o dígito verificador é 0.
Um exemplo completo
Vamos validar o IMEI 35 824011 345678 4. Os primeiros 14 dígitos são:
3 5 8 2 4 0 1 1 3 4 5 6 7 8
Dobre um dígito a cada dois (os dígitos nas posições 2, 4, 6, 8, 10, 12, 14 a partir da esquerda — 5, 2, 0, 1, 4, 6, 8):
| Original | Dobrado | Reduzido |
|---|---|---|
| 5 | 10 | 1 |
| 2 | 4 | 4 |
| 0 | 0 | 0 |
| 1 | 2 | 2 |
| 4 | 8 | 8 |
| 6 | 12 | 3 |
| 8 | 16 | 7 |
Agora intercale-os com os dígitos de posição ímpar intactos (3, 8, 4, 1, 3, 5, 7), mantendo cada dígito na sua posição original:
3, 1, 8, 4, 4, 0, 1, 2, 3, 8, 5, 3, 7, 7
Soma: 3 + 1 + 8 + 4 + 4 + 0 + 1 + 2 + 3 + 8 + 5 + 3 + 7 + 7 = 56.
Dígito verificador: o próximo múltiplo de 10 igual ou superior a 56 é 60, então 60 − 56 = 4.
O dígito verificador calculado é 4, e o 15º dígito do nosso IMEI também é 4. Eles coincidem, então 358240113456784 é um IMEI válido. (Este é o mesmo passo a passo que a calculadora da página inicial executa no servidor para cada número que gera.)
Vetores QA que separam formato e identidade
| Candidato | Resultado de formato | Interpretação |
|---|---|---|
490154203237518 |
Aprovado | Controle Luhn positivo; atribuição desconhecida |
490154203237519 |
Reprovado | Dígito verificador alterado de 8 para 9 |
000000000000000 |
Aprovado | Mostra que Luhn não prova identidade |
49015420323751 |
Reprovado | Apenas 14 dígitos; falta o verificador |
4901542032375180 |
Não é candidato IMEI | Dezesseis dígitos exigem contrato IMEISV separado |
Para testes automatizados reutilizáveis, baixe os vetores JSON CC0 ou consulte o contrato e suas limitações (em inglês).
Motivos comuns para um IMEI falhar na validação
Causas comuns de falha de formato incluem:
- Erro de transcrição — Luhn detecta um dígito alterado e muitas transposições adjacentes.
- Comprimento errado — 14 dígitos não têm o verificador; 16 devem ser analisados por um contrato IMEISV separado.
- Caracteres ocultos — um espaço, hífen ou espaço sem quebra perdido, colado de uma planilha. Normalize apenas espaços, separadores Unicode e hífens ASCII; rejeite qualquer outro caráter.
- Não é um IMEI — um número de série, um MEID ou uma sequência aleatória confundida com um IMEI. Um valor de preenchimento pode passar no Luhn, como mostra o vetor de zeros. Rejeite-o com uma regra de negócio explícita, sem tratar Luhn como base de atribuições.
Verificar IMEIs em grande escala
Validar um número é fácil. Validar milhares — em um fluxo de QA, em uma tarefa de triagem de fraude ou em um script de limpeza de dados — exige automação. A lógica é pequena o suficiente para ser implementada em qualquer linguagem. Aqui está a verificação de Luhn essencial em JavaScript:
function isValidImei(imei) {
const digits = String(imei).replace(/[\s\p{Z}-]+/gu, '');
if (!/^[0-9]{15}$/.test(digits)) return false;
let sum = 0;
for (let i = 0; i < 15; i++) {
let d = Number(digits[i]);
// Dobre um dígito a cada dois, começando pela direita.
if ((15 - i) % 2 === 0) {
d *= 2;
if (d > 9) d -= 9;
}
sum += d;
}
return sum % 10 === 0;
}
Repare nesta propriedade elegante: se você incluir o dígito verificador na soma e o total for divisível por 10, o IMEI é válido. É a mesma regra, expressa em uma única linha.
Para obter dados de teste estruturalmente válidos, Random IMEI gera lotes com prefixos da sua cópia local de TAC, datada e não oficial. Exporte-os apenas para testes isolados.
Validação e geração têm contratos distintos
- Validar responde "este número existente está bem formado?" Use o validador de IMEI.
- Gerar produz novos números válidos para testes. Use o gerador.
As equipes de QA usam os dois: geram um lote de IMEIs válidos como dados de teste e, em seguida, confirmam que sua aplicação os valida corretamente (e rejeita os defeituosos que criaram de propósito).
Perguntas Frequentes
Como verifico se um IMEI é válido?
Confirme que ele tem exatamente 15 dígitos, contém apenas números e que o último dígito coincide com a soma de verificação de Luhn dos primeiros 14. O método mais rápido é colá-lo no validador de IMEI, que faz as três verificações instantaneamente.
O que é o algoritmo de Luhn?
O algoritmo de Luhn (módulo 10) é uma fórmula de soma de verificação que detecta erros acidentais em números de identificação. Para IMEIs, ele confere se o 15º dígito é matematicamente coerente com os outros 14, capturando a maioria dos erros de digitação de um único dígito e das transposições.
Um IMEI válido significa que o telefone é genuíno?
Não. A validação confirma apenas a coerência interna entre formato e soma de verificação. Não estabelece atribuição, modelo, propriedade nem lista negra. Use uma fonte autorizada para essas perguntas.
Por que meu IMEI falha na validação?
As causas mais comuns são um dígito digitado errado, o comprimento errado (14 ou 16 em vez de 15), ou separadores copiados de outro aplicativo. Remova apenas espaços, separadores Unicode e hífens ASCII; rejeite qualquer outro caractere e verifique o comprimento.
Posso validar um IMEI offline?
Sim. A verificação de Luhn é uma aritmética simples que não precisa de conexão com a internet nem de banco de dados. Você pode calculá-la à mão, em uma planilha ou com algumas linhas de código como o exemplo acima.
Um número de 14 dígitos pode ser um IMEI válido?
Não. Um IMEI padrão tem 15 dígitos. Um valor de 14 dígitos está sem o dígito verificador (pode ser apenas o TAC mais o número de série). O IMEISV de 16 dígitos é uma variante distinta que substitui o dígito verificador por um número de versão de software de 2 dígitos.
Onde posso obter IMEIs válidos para testes?
Gere-os. O gerador Random IMEI cria valores de 15 dígitos com prefixos da cópia local datada e dígitos verificadores Luhn corretos. Cada resultado passa nesta validação estrutural, mas o mapeamento não é uma consulta oficial.
Fontes e leituras adicionais
Experimente nossas ferramentas
Crie fixtures válidas por Luhn ou verifique o formato de 15 dígitos e checksum de um valor.
Artigos relacionados
O que é IMEI? Estrutura, IMEISV e limites de Luhn
O IMEI identifica equipamentos móveis. Conheça TAC, número de série, dígito verificador, diferenças para identificadores SIM e limites de Luhn.
O que é um TAC? Os 8 primeiros dígitos do IMEI
O TAC corresponde aos 8 primeiros dígitos do IMEI e pode ser associado a um tipo alocado por dados autorizados. Distinga alocação de consulta.
IMEI em lote: Luhn, dados de teste e automação de QA
Gere até 50 valores válidos pelo Luhn com RandomIMEI.com ou crie um gerador local sem duplicados para conjuntos QA maiores.