Este gerador de códigos aleatórios cria códigos de resgate — cupons, vales-presente, números de série — em lote, no seu navegador. Não é código-fonte, e nada é enviado a lugar nenhum.
O que é um gerador de códigos aleatórios?
Um gerador de códigos aleatórios produz um lote de códigos curtos e únicos para alguém resgatar: um cupom num e-mail, um vale-presente num cartão impresso, um número de série numa caixa. Os códigos não significam nada; eles são conferidos com a lista que você emitiu.
Não é código-fonte
Vale esclarecer logo, porque a palavra tem vários sentidos. Nada aqui escreve programas.
Se você chegou aqui atrás de texto aleatório para dados de teste ou para popular um banco de dados, a ferramenta certa é o gerador de strings aleatórias. Um gerador de códigos aleatórios serve para o que o cliente digita no campo de cupom do checkout.
As três formas de um código
Quase todo código de resgate tem uma de três formas, e é por isso que os formatos predefinidos deste gerador de códigos aleatórios são usos, e não estilos.
- Agrupado:
A7K9-P2XM-4RTV, para tudo o que é lido em voz alta a partir de um cartão. - Com prefixo:
SN-8F3K-9QMT, para que o atendimento saiba de relance de qual lote ele veio. - Numérico:
839204, para teclados de celular e maquininhas de cartão antigas.
Para o que ele não serve
Isto não é senha nem credencial de API. Um código de resgate é curto de propósito, porque uma pessoa precisa digitá-lo, e curto é exatamente o contrário do que um segredo precisa.
Para tudo o que uma máquina consome, o gerador de chaves de API (em inglês) entrega o comprimento de que esse trabalho realmente precisa.
Os seus códigos podem ser adivinhados?
Por que “impossível de adivinhar” não é resposta
Quase todo gerador de códigos aleatórios diz que os seus códigos são praticamente impossíveis de adivinhar. Para um código de doze caracteres, é verdade. Para um de seis, simplesmente não é, e a diferença não é questão de opinião.
Um atacante não precisa adivinhar um código específico. Qualquer um que funcione serve, então o número que importa é o tamanho do espaço de códigos dividido pela quantidade de códigos que você emitiu.
Comparação em escala logarítmica de quantas tentativas ao acaso são necessárias para acertar um código válido, supondo dez mil códigos emitidos. Seis dígitos: 100 tentativas. Seis letras e dígitos: 218.000. Oito caracteres legíveis: 110 milhões. Doze caracteres legíveis: 1,15 vezes 10 elevado a 14, ou 115 trilhões. Os dois primeiros estão ao alcance de um script que faz cem tentativas por segundo durante um dia; o terceiro levaria umas duas semanas.
Como ler o número acima das opções
Em vez da entropia, este gerador de códigos aleatórios mostra quantas tentativas ao acaso seriam necessárias até uma delas acertar um código que você emitiu. Aumente a quantidade e o número cai; acrescente caracteres e ele sobe.
Abaixo de uns dez milhões, um script que faz cem tentativas por segundo encontra um código válido em menos de um dia. É aí que o número fica vermelho, e esse é o único aviso que o gerador de códigos aleatórios dá.
Por que DESCONTO25 é o pior formato de todos
Os códigos que uma pessoa inventa não são só fracos: são a primeira coisa testada. A SpiderLabs documentou como atacantes montam dicionários com as trinta frases mais usadas pelo varejo e vão testando uma por uma.
Os campos de cupom em geral não diferenciam maiúsculas de minúsculas, então DESCONTO25 e desconto25 são uma tentativa, não duas. O mesmo relato conta que, ao notar um padrão de códigos 10% OFF, bastou testar 90% OFF, e funcionou.
Um gerador de códigos aleatórios não tem padrão nenhum para alguém notar.
Qual deve ser o comprimento de um código
Doze caracteres do conjunto legível é o padrão aqui porque continua folgado com qualquer tamanho de lote que esta página consegue gerar. Dez bastam para campanhas pequenas.
Seis caracteres só são seguros quando os códigos são de uso único, o checkout limita as tentativas e há poucos deles. Dois caracteres a mais não custam nada ao seu cliente e multiplicam por mil o trabalho do atacante, então deixe o gerador de códigos aleatórios fazer esse trabalho, e não as suas regras antifraude.
Códigos que sobrevivem à digitação
Grupos e hífens
As pessoas copiam códigos em pedaços, então um gerador de códigos aleatórios deveria entregá-los em pedaços. Quatro caracteres por grupo é o tamanho consagrado, e é por isso que números de cartão e chaves de licença usam esse formato.
A especificação Base32 de Crockford diz isso sem rodeios: hífens podem ser inseridos para dividir uma sequência em pedaços manejáveis e são ignorados na decodificação. Retire os separadores antes de procurar um código, e o cliente que não os digitar consegue resgatá-lo do mesmo jeito.
Caracteres que se confundem
As falhas clássicas são 0 com O e 1 com I ou l. Cada uma vira a reclamação de alguém dizendo que o código “não funciona”, um custo que um gerador de códigos aleatórios pode eliminar de graça.
O alfabeto Base32 de Crockford tira quatro letras do conjunto habitual de dez dígitos e vinte e seis maiúsculas. O I e o L, porque são confundidos com o número um; o O, porque é confundido com o zero; e o U, para que um código ao acaso forme menos palavrões, embora não os evite de todo. Sobram 32 símbolos: de 0 a 9 e A B C D E F G H J K M N P Q R S T V W X Y Z.
O conjunto legível desta ferramenta é exatamente esse alfabeto. Tirar quatro símbolos custa cerca de um quinto de bit por caractere, algo que nenhuma campanha real vai notar.
Ainda assim, o U sozinho não basta: sem ele ainda cabem palavras como MERDA ou CAGAR. Por isso este gerador de códigos aleatórios também descarta qualquer código que forme uma palavra da sua lista — cerca de 130, em português, inglês e espanhol — e sorteia outro. Com doze caracteres legíveis, isso acontece com mais ou menos um código em cada 600.
O caractere verificador
Ligue a opção e um símbolo a mais é acrescentado, calculado a partir dos anteriores. Um código digitado errado não fecha essa conta, então você pode recusá-lo antes de consultar o banco de dados. É a mesma ideia dos dois dígitos verificadores do CPF.
Ele detecta qualquer caractere digitado errado e qualquer troca de dois caracteres vizinhos, que são os dois erros que as pessoas cometem de verdade. Isso é uma propriedade da aritmética, não uma estimativa, e os testes deste site conferem caso por caso.
O que ele não faz
Um caractere verificador não é segurança. Qualquer pessoa consegue calcular um válido, então ele não atrapalha quem tenta adivinhar; só filtra os erros.
Ele também custa um caractere: o símbolo verificador é derivado dos outros, e não aleatório, então um código de doze caracteres com ele ligado resiste como um de onze. O número lá em cima já leva isso em conta.
Gerar um lote
Sem repetidos dentro do lote
Cada código é comparado com os que já foram criados, então um lote de mil contém mil códigos diferentes. Se o formato não consegue produzir tantos, este gerador de códigos aleatórios recusa o lote em vez de devolver um menor sem avisar.
Prefixos e sufixos
Um prefixo torna o lote reconhecível: NATAL- diz ao atendimento a que campanha um código pertence sem precisar procurá-lo. Ele é igual em todos os códigos, então não acrescenta nada que um atacante precise adivinhar.
Trate-o como uma etiqueta. A parte aleatória é a razão de existir de um gerador de códigos aleatórios, e é ela que deve carregar todo o peso.
Exportar, e o que vem depois
Copiar leva a lista inteira; baixar entrega um CSV de uma coluna só, com o cabeçalho code, que é o formato que os importadores de descontos em lote esperam.
Aí termina o trabalho deste gerador de códigos aleatórios. Ele não emite, resgata, expira nem acompanha nada, e não guarda nenhum registro do que produziu.
Por isso ele não evita os seus códigos antigos
Nada é guardado entre um lote e outro, então o segundo é sorteado do zero, e não em volta do primeiro. Com um formato de doze caracteres, uma coincidência acidental é remota, mas elimine os duplicados na importação se precisar de certeza.
Perguntas frequentes
Qual deve ser o comprimento de um cupom de desconto?
O suficiente para que adivinhar não compense. Doze caracteres do conjunto legível deixam um código válido a cerca de cem trilhões de tentativas, mesmo depois de emitir dez mil códigos. Com seis caracteres, os scripts começam a encontrar códigos válidos, e o número acima das opções mostra de que lado dessa linha você está.
Para que serve o caractere verificador?
É um símbolo a mais, calculado a partir do resto do código, que permite recusar um código digitado errado antes de procurá-lo. Ele detecta qualquer erro em um único caractere e qualquer troca de dois caracteres vizinhos. Ligue a opção se as pessoas digitam os códigos à mão; deixe desligada se eles só são colados.
Por que faltam o O, o I, o L e o U?
O conjunto segue o alfabeto Base32 de Crockford: o I e o L são lidos como 1, o O como 0, e o U sai para que um código ao acaso forme menos palavrões. Como isso não basta, o gerador também descarta qualquer código que forme uma de cerca de 130 palavras em português, inglês ou espanhol. Perder quatro símbolos quase não custa nada.
Os hífens contam no comprimento?
Não. O comprimento conta só o corpo do código, então um código de doze caracteres em grupos de quatro ocupa catorze na tela. A especificação de Crockford trata os hífens como decoração a ser ignorada, e a maioria dos sistemas de resgate os remove, mas confirme que o seu faz isso antes de imprimir.
Pode haver dois códigos iguais no mesmo lote?
Não. Cada código é comparado com os outros enquanto o lote é montado, então um lote de mil tem mil códigos diferentes. Se o formato não permite tantos códigos diferentes, o lote é recusado em vez de vir com repetidos sem aviso.
Posso gerar um lote novo que evite os códigos anteriores?
Aqui, não. Nada é guardado entre um lote e outro, então este gerador de códigos aleatórios não lembra o que produziu um minuto atrás. Com um formato de doze caracteres, uma coincidência acidental é muito improvável, mas, se você precisa de garantia, elimine os duplicados comparando com a sua lista atual na importação.
Posso importar os códigos na Shopify, no WooCommerce ou num sistema de vale-presente?
Sim. Baixe o CSV e ele abre em qualquer planilha como uma única coluna com o cabeçalho “code”, que é o nome que a maioria das plataformas espera para importar descontos em lote; por isso ele não é traduzido. Esta ferramenta só cria os códigos: emiti-los, resgatá-los e acompanhá-los é trabalho da sua plataforma.
Ele gera código-fonte aleatório?
Não. Aqui, “código” quer dizer código de resgate: um cupom, um vale-presente ou um número de série. Se o que você procura é texto aleatório para testes, e não algo que um cliente digita, a ferramenta certa é o gerador de strings aleatórias.
Mais geradores gratuitos
Todos os geradores deste site funcionam no seu navegador, sem conta e sem limites, assim como este gerador de códigos aleatórios. Os de chaves e segredos e o de UUID, por enquanto, só estão em inglês.
Ferramentas de senha
- Gerador de frases secretasPalavras em português ao acaso, fáceis de lembrar.
- Testador de força de senhaTeste uma senha sem enviá-la a lugar nenhum.
- Gerador de senhas fáceis de lembrarPalavras curtas em português que cabem num formulário.
- Gerador de senhas pronunciáveisSenhas que dá para dizer em voz alta.
Geradores aleatórios
Chaves e segredos
- API Key Generator (em inglês)Prefixed keys in common formats.
- Secret Key Generator (em inglês)128 to 512-bit secrets in hex or Base64.
- JWT Secret Generator (em inglês)HS256, HS384 and HS512 signing secrets.
- Salt Generator (em inglês)Random salts for password hashing.
- Hash Generator (em inglês)SHA-256, SHA-384 and SHA-512 in-browser.
Metodologia
Atualizado em
Como os códigos são gerados
Cada caractere vem de crypto.getRandomValues() por amostragem por rejeição, então todos os símbolos do conjunto escolhido são igualmente prováveis, e o Math.random() não é usado em nenhuma parte deste gerador de códigos aleatórios. Os códigos vão sendo guardados num conjunto à medida que são criados, e é isso que garante que um lote não tenha duplicados.
Como o número de tentativas é calculado
tentativas por acerto = conjuntocaracteres aleatórios ÷ códigos emitidos
Só contam os caracteres aleatórios. Prefixos, sufixos, separadores e o símbolo verificador são fixos ou derivados, então nenhum deles acrescenta possibilidades. O limite do aviso é de dez milhões, mais ou menos o que um script que faz cem tentativas por segundo alcança em um dia.
O símbolo verificador
É o símbolo verificador opcional de Crockford: o código lido como um número em base 32, módulo 37, escrito com os cinco símbolos extras reservados para os valores de 32 a 36.
Como 37 é primo e não divide nenhuma potência de 32, trocar qualquer símbolo sempre muda o resultado, e o mesmo vale para a troca de dois vizinhos. Os testes unitários conferem as duas coisas testando todos os casos possíveis, em vez de citar o argumento.
O filtro de palavras
Um código cujas letras formem uma de cerca de 130 palavras em português, inglês e espanhol é descartado e outro é sorteado: é a mesma lista, e a mesma rejeição, do gerador de senhas pronunciáveis. As palavras em português e em espanhol foram escolhidas à mão, e cada uma aparece em pelo menos uma lista de licença aberta.
Neste gerador de códigos aleatórios, o filtro remove cerca de um código legível de doze caracteres em cada seiscentos e um código só de letras de dezesseis caracteres em cada noventa; os códigos só de dígitos não são afetados.
O número de tentativas não leva isso em conta, porque o espaço diminui no máximo cerca de 1%.
O que esta ferramenta não faz
Este gerador de códigos aleatórios não guarda, emite, resgata, expira nem acompanha códigos, e não consegue comparar um lote novo com um antigo. Nada do que é gerado aqui é enviado pela rede, gravado ou incluído em qualquer estatística. Fechou a aba, acabou.