IMEI em lote: Luhn, dados de teste e automação de QA

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.

Random IMEI Editorial Team · 2026-03-18 · Atualizado em 2026-08-05 · Revisão editorial interna (2026-08-05)

Um IMEI de teste pode validar um campo de formulário, enquanto testes de carga ou migração podem exigir conjuntos muito maiores. O RandomIMEI.com cria de 1 a 50 valores por lote web; para centenas ou milhares, use um gerador local com deduplicação explícita e mantenha os resultados em um ambiente de teste isolado.

Este guia define um contrato reproduzível de dados de teste: 15 dígitos, um dígito verificador Luhn válido, entradas TAC documentadas, tratamento explícito de colisões e respostas de situação simuladas.


Por que números aleatórios de 15 dígitos não bastam

Sequências aleatórias de 15 dígitos costumam descumprir um ou mais contratos de teste:

  1. Falha no Luhn: um IMEI padrão de 15 dígitos inclui um dígito verificador Luhn. Um último dígito uniforme e aleatório tem uma chance em dez de coincidir com o cálculo; cerca de 90% das sequências arbitrárias falham em um validador limitado ao Luhn.

  2. Ramificações por prefixo não cobertas: alguns sistemas mapeiam os oito primeiros dígitos por um conjunto TAC. Um prefixo arbitrário não exercita um mapeamento conhecido e pode ser tratado como desconhecido por software que consulta uma fonte autorizada.

  3. Duplicados sem controle: quando um esquema ou cenário exige identificadores únicos, seriais aleatórios podem colidir e acionar uma restrição pelo motivo errado.

  4. Distribuição não declarada: uma mistura arbitrária de prefixos não informa quais ramificações do produto os dados de teste devem cobrir. Defina categorias e pesos com base nos seus requisitos, não em uma participação de mercado sem fonte.

Um gerador de dados de teste em lote útil deve calcular valores Luhn válidos, usar TACs escolhidos para o teste, rejeitar duplicados no conjunto atual e documentar a origem dos rótulos de famílias de dispositivos.


Casos de uso para geração de IMEI em lote

1. Carga de banco de dados e teste de esquema

Ao criar ou migrar um banco que armazena identificadores de dispositivos, escolha uma quantidade de dados que exercite o plano de consulta e as restrições que você pretende medir. Bancos vazios e testes com um registro não revelam:

  • Desempenho do índice na cardinalidade planejada
  • Comportamento do plano de consulta ao filtrar pelo prefixo TAC do fabricante
  • Poda de partições quando o esquema particiona por TAC
  • Tempo de validação de restrições sob carga de inserção

Registre com a medição de desempenho a versão do banco, a quantidade de linhas, as categorias TAC e o conjunto de consultas. Resultados sintéticos só predizem a produção quando essas entradas correspondem à carga real.

2. Testes de carga e medição de desempenho

Repetir um identificador pode medir o cache em vez do caminho de consulta. Dimensione o conjunto conforme o comportamento do cache, a mistura de requisições e a concorrência do seu plano de desempenho.

Envie o conjunto controlado ao k6, JMeter, Locust ou Gatling e mantenha as respostas de situação atrás de um serviço local simulado. Uma sequência IMEI diferente não cria um registro real de dispositivo.

3. Desenvolvimento de plataformas MDM

Um plano de teste MDM pode cobrir fluxos de inscrição, atribuição de políticas, consultas de inventário e relatórios de conformidade com vários tamanhos de inventário. Use os volumes da sua meta de capacidade, não um intervalo genérico do setor.

Valores gerados em lote podem preencher um inventário simulado ou de pré-produção sem copiar identificadores de clientes. Respostas de inscrição e elegibilidade do fornecedor devem continuar simuladas ou usar um ambiente de teste aprovado.

4. Fluxos de automação QA

Suítes automatizadas que validam funções relacionadas a IMEI precisam de dados exclusivos em cada execução. Manter poucos IMEIs fixos nos dados de teste gera interferência entre casos, pois vários deles compartilham o estado dos mesmos identificadores.

Gere novos valores no início de cada execução, ou mantenha um conjunto grande e pré-gerado para selecionar com um contador ou deslocamento aleatório. A geração em lote atende às duas abordagens.

5. Simulação de rede de telecomunicações

Engenheiros que testam integrações HLR, VLR ou EIR podem modelar campos no formato IMSI e IMEI em registros sintéticos. Defina a relação e a situação esperada do registro nos dados de teste; a geração por si só não fornece identidade de assinante nem situação do equipamento.

6. Teste de plataformas de dispositivos usados

Plataformas que verificam a situação de um IMEI, como lista negra, bloqueio de operadora ou garantia, precisam testar o fluxo com entradas variadas. Inclua:

  • Resposta controlada: o serviço simulado retorna situação livre ou bloqueada
  • Tempo limite ou erro: o serviço simulado retorna o formato de falha do contrato
  • Formato inválido: entrada malformada
  • Caso limite de mapeamento: Luhn válido com TAC desconhecido pelo catálogo de teste

Valores gerados não possuem situação conhecida de lista negra, bloqueio de operadora ou garantia. Teste essas ramificações com dados cujas respostas a simulação controla; não deduza uma situação "livre" apenas pela geração.


Requisitos técnicos para gerar IMEIs válidos em lote

A geração confiável em escala precisa cumprir várias condições.

Algoritmo de Luhn em escala

Cada IMEI gerado precisa de um dígito verificador Luhn válido. Esta implementação em Python atende à geração em lote:

import random

def luhn_checksum(digits_14: str) -> int:
    """Calcula o dígito verificador Luhn de uma sequência de 14 dígitos."""
    digits = [int(d) for d in digits_14]
    # Em uma base de 14 dígitos, dobre as posições 2, 4, ... 14 da esquerda.
    for i in range(13, -1, -2):
        digits[i] *= 2
        if digits[i] > 9:
            digits[i] -= 9
    total = sum(digits)
    return (10 - (total % 10)) % 10

def generate_imei(tac: str) -> str:
    """Gera um IMEI válido com o TAC de 8 dígitos fornecido."""
    if len(tac) != 8 or any(ch not in "0123456789" for ch in tac):
        raise ValueError("o TAC deve conter exatamente 8 dígitos")
    serial = str(random.randint(0, 999999)).zfill(6)
    base = tac + serial
    check = luhn_checksum(base)
    return base + str(check)

def generate_bulk(tac: str, count: int) -> list[str]:
    """Gera IMEIs válidos e únicos para um TAC informado."""
    if not 1 <= count <= 1_000_000:
        raise ValueError("a quantidade deve estar entre 1 e 1.000.000")
    seen = set()
    results = []
    while len(results) < count:
        imei = generate_imei(tac)
        if imei not in seen:
            seen.add(imei)
            results.append(imei)
    return results

# Exemplo: gere 1.000 dados de teste com um prefixo explicitamente
# não oficial, escolhido para este teste isolado. Use sua própria entrada documentada.
imeis = generate_bulk("12345678", 1000)
print(f"{len(imeis)} IMEIs únicos gerados")
print(f"Amostra: {imeis[:5]}")

Definir a distribuição pelo plano de teste

Não copie para os dados de teste uma tabela de participação de mercado sem fonte. Defina as categorias e os pesos que seu produto aceita, documente a origem dos requisitos e mantenha uma alternativa explícita para TAC desconhecido.

Categoria de teste Exemplo de objetivo
Mapeamento local conhecido Exercitar uma ramificação de rótulo de dispositivo
Prefixo desconhecido Verificar uma alternativa segura
Várias famílias configuradas Testar filtros e agregações
Entrada repetida ou malformada Testar restrições e erros

Garantir unicidade

Se o esquema ou cenário exigir valores únicos, use uma destas abordagens:

  1. Deduplicação por conjunto, mostrada no exemplo Python: acompanhe os IMEIs gerados em um conjunto e gere outro em caso de colisão.
  2. Números de série sequenciais: incremente o campo nos dígitos 9 a 14. Isso garante valores distintos dentro do conjunto de teste para um TAC. Os seis dígitos oferecem 1.000.000 de combinações, mas o Random IMEI não sabe quais podem estar atribuídas no mundo real.

Matemática de colisões e alternativas deterministas

Um TAC oferece 1.000.000 de entradas seriais de seis dígitos. Com amostragem aleatória, o número esperado de pares duplicados é aproximadamente n(n-1) / (2 x 1.000.000). Em 1.000 extrações de um TAC, o valor chega a cerca de 0,5, o que corresponde a uma probabilidade próxima de 39% de ocorrer pelo menos uma colisão em um gerador uniforme ideal.

A rejeição por conjunto remove duplicados da saída, mas perde eficiência conforme o espaço enche. Números de série sequenciais tornam o conjunto de teste reproduzível e evitam colisões internas. Use mais de um TAC apenas quando o plano exigir várias categorias de mapeamento ou mais de um milhão de entradas distintas.

Matriz de vetores QA

Entrada Resultado esperado Objetivo
490154203237518 Luhn aprovado Controle positivo do cálculo
490154203237519 Luhn reprovado Dígito verificador modificado
000000000000000 Luhn aprovado, identidade desconhecida Mostrar que Luhn não é atribuição
49015420323751 Comprimento inválido Falta o dígito verificador
Duas linhas idênticas Duplicado conforme a regra do conjunto de teste Ramificação da restrição

Integrar IMEIs em lote com ferramentas QA

Com k6 (teste de carga em JavaScript)

import http from 'k6/http';
import { check } from 'k6';
import { SharedArray } from 'k6/data';

// Pré-carregue 50.000 IMEIs gerados a partir de um arquivo
const imeis = new SharedArray('imeis', function () {
  return open('./test_imeis.txt').split('\n').filter(l => l.length === 15);
});

export default function () {
  // Escolha um IMEI aleatório do conjunto
  const imei = imeis[Math.floor(Math.random() * imeis.length)];

  // Use um serviço local simulado cuja resposta seja controlada pelo teste.
  const res = http.post('http://localhost:8080/mock/devices/lookup', {
    imei: imei,
  });

  check(res, {
    'código é 200': (r) => r.status === 200,
    'retorna dados do dispositivo': (r) => r.json('manufacturer') !== undefined,
  });
}

Com pytest (suíte de testes Python)

import pytest
import random

# Dado de teste que fornece um IMEI único por teste
@pytest.fixture
def unique_imei(imei_pool):
    """Fornece um IMEI único de um conjunto pré-gerado."""
    return imei_pool.pop()

@pytest.fixture(scope="session")
def imei_pool():
    """Carrega o conjunto pré-gerado de IMEIs no início da sessão."""
    with open("test_data/bulk_imeis.txt") as f:
        imeis = [line.strip() for line in f if len(line.strip()) == 15]
    random.shuffle(imeis)
    return imeis

def test_device_lookup(unique_imei, api_client):
    response = api_client.lookup_device(unique_imei)
    assert response.status_code == 200
    assert response.json()["format_valid"] is True

Com SQL (carga do banco de dados)

-- PostgreSQL: inserção em lote a partir de CSV
CREATE TEMP TABLE temp_imeis (imei CHAR(15));

COPY temp_imeis FROM '/path/to/bulk_imeis.csv' CSV;

-- Insira na tabela devices com metadados adicionais
INSERT INTO test_devices (imei, created_at, status)
SELECT
    imei,
    NOW() - (random() * INTERVAL '365 days'),  -- Data de criação aleatória
    CASE WHEN random() < 0.95 THEN 'active' ELSE 'inactive' END
FROM temp_imeis
ON CONFLICT (imei) DO NOTHING;

SELECT COUNT(*) FROM test_devices;  -- Confira a quantidade de linhas

Usar RandomIMEI.com para geração em lote

O RandomIMEI.com aceita pequenos lotes web. Você pode:

  • Gerar de 1 a 50 valores por requisição
  • Selecionar um fabricante e um perfil de dispositivo na cópia local datada
  • Copiar os resultados ou baixar um arquivo CSV

O site não oferece uma API pública de geração. Para automação ou conjuntos maiores, adapte o exemplo local de Luhn deste guia e acrescente entradas deterministas, deduplicação e proteções exclusivas para testes.

Cada IMEI gerado:

  • Possui um dígito verificador Luhn válido
  • Usa um prefixo da cópia local versionada e não oficial do Random IMEI
  • É deduplicado no lote web atual

O Random IMEI não consulta GSMA, operadoras, ativação, garantia nem listas negras. Portanto, não pode determinar se um resultado está atribuído, registrado, bloqueado ou será aceito por outro sistema. Trate cada saída como dado sintético e não a envie a sistemas reais de identidade.


Formatos de saída para IMEIs em lote

O RandomIMEI.com oferece cópia para a área de transferência e CSV. Um gerador local sob seu controle também pode produzir os formatos exigidos pelo ambiente de testes:

Formato Caso de uso Exemplo
Texto simples Scripts shell, importações simples Um IMEI por linha
CSV Planilhas, importações em portal MDM imei,fabricante,modelo
Lista JSON Integrações API, ferramentas JavaScript ["490154203237518", ...]
Objetos JSON Metadados por IMEI [{"imei": "...", "tac": "35299906", "marca": "Apple"}]
INSERT SQL Carga direta no banco INSERT INTO devices VALUES (...)

Usos excluídos dos IMEIs gerados em lote

Em algumas jurisdições e organizações, a geração de IMEI em lote pode ser adequada para dados de teste isolados quando a política interna e a lei aplicável permitirem. Ela não deve ser usada para:

  • Falsificar um IMEI: reprogramar ou apresentar de forma falsa o identificador de um dispositivo real pode ser ilegal e está fora da finalidade deste site. Mantenha os valores gerados como dados em testes controlados.
  • Contornar listas: um valor gerado não possui situação de registro verificada. Não o envie a uma operadora, lista negra, ativação ou outro serviço de identidade em produção.
  • Cometer fraude: fraude de seguro, financiamento de dispositivos ou qualquer esquema que apresente uma identidade falsa de dispositivo está fora do escopo. Os dados de teste existem para ambientes de desenvolvimento, não para sistemas reais.

As leis variam conforme a jurisdição. Usar um identificador falso para acessar serviços, se passar por outro dispositivo ou cometer fraude pode ser ilegal; mantenha os dados de teste em ambientes controlados e procure orientação jurídica para fluxos regulados.


Perguntas frequentes

Quantos IMEIs distintos posso gerar com um único código TAC?

O campo de número de série com seis dígitos oferece 1.000.000 de entradas possíveis para um TAC. A enumeração sequencial pode criar essa quantidade de valores de teste distintos, mas o Random IMEI não sabe se algum valor coincide com um dispositivo atribuído. Use vários TACs quando o contrato de teste exigir mais valores ou categorias de mapeamento.

Qual é a forma mais rápida de gerar 1 milhão de IMEIs de teste?

Uma abordagem determinista enumera o intervalo serial de um prefixo de teste documentado e calcula Luhn para cada linha. Ela evita colisões aleatórias; meça a implementação e o tamanho do conjunto no seu ambiente em vez de presumir um tempo fixo.

Posso usar IMEIs gerados em lote em um fluxo CI/CD?

Sim. Gere os valores em um script local antes dos testes ou mantenha um conjunto claramente identificado como dado de teste. O RandomIMEI.com não oferece API pública de geração; as tarefas de CI devem usar código próprio, revisável e inicializado de forma reproduzível.

IMEIs gerados em lote funcionam em ferramentas reais de verificação?

Eles passam em verificações limitadas ao formato de 15 dígitos e ao cálculo Luhn. Outras ferramentas podem consultar dados proprietários de TAC, operadora, lista negra ou garantia. O Random IMEI não conhece nem prevê esses resultados; não envie valores gerados a serviços reais de consulta.

Como evito duplicados em um conjunto de IMEIs gerados em lote?

Rejeite colisões com um conjunto ao usar seriais aleatórios, ou enumere o campo serial de seis dígitos de forma determinista. A segunda opção evita colisões internas e torna as execuções reproduzíveis. Exija unicidade apenas quando ela fizer parte do contrato do esquema ou cenário.

Um IMEI gerado pode coincidir com o IMEI de um dispositivo real?

Sim. Um serial aleatório dentro de um TAC pode coincidir com um identificador atribuído, e o Random IMEI não possui uma base oficial de atribuições para excluí-lo. Mantenha os resultados fora de sistemas reais de operadora, ativação, garantia, financiamento, seguro e lista negra.

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.