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".
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.