Geração de código de cupom

Gostaria de gerar códigos de cupom, por exemploAYB4ZZ2. No entanto, eu também gostaria de poder marcar os cupons usados ​​e limitar seu número global, digamosN. A abordagem ingênua seria algo como"gerarN códigos alfanuméricos exclusivos, colocá-los no banco de dados e realizar uma pesquisa de banco de dados em cada operação de cupom. "

No entanto, tanto quanto sei, também podemostentar encontrar uma função MakeCoupon(n), que converte o número fornecido em uma string semelhante a um cupom com comprimento predefinido.

Tanto quanto eu entendo,MakeCoupon deverá preencher os seguintes requisitos:

Seja bijetivo. É inversoMakeNumber(coupon) deve ser efetivamente computável.

Saída paraMakeCoupon(n) deve ser alfanumérico e deve ter pequenas econstante comprimento - para que pudesse ser chamadolegível humano. Por exemplo.SHA1 Digest não passaria este requisito.

Singularidade prática. Resultados deMakeCoupon(n) para todo naturaln <= N deve ser totalmente único ou único nos mesmos termos que, por exemplo,MD5 é único (com a mesma probabilidade de colisão extremamente pequena).

(este é complicado de definir) Não deve ser óbvio como enumerar todos os cupons restantes de um único código de cupom - digamosMakeCoupon(n) eMakeCoupon(n + 1) deve diferir visualmente.

Por exemplo.MakeCoupon(n), que simplesmente produzn preenchido com zeros iria falhar este requisito, porque000001 e000002 na verdade não diferem "visualmente".

Q:

Existe algum gerador de função ou função que preencha os seguintes requisitos? Minhas tentativas de pesquisa só me levam a[CPAN] Código do cupom, mas não preenche o requisito da função correspondente ser bijetivo.

questionAnswers(5)

yourAnswerToTheQuestion