Generación de código de cupón
Me gustaría generar códigos de cupón, por ejemplo.AYB4ZZ2
. Sin embargo, también me gustaría poder marcar los cupones utilizados y limitar su número global, digamosN
. El enfoque ingenuo sería algo así como"generarN
códigos alfanuméricos únicos, póngalos en la base de datos y realice una búsqueda db en cada operación de cupón ".
Sin embargo, en la medida en que me doy cuenta, también podemosintento de encontrar una función MakeCoupon(n)
, que convierte el número dado en una cadena similar a un cupón con una longitud predefinida.
Hasta donde yo entiendo,MakeCoupon
debe cumplir los siguientes requisitos:
Se bijective. Es inversoMakeNumber(coupon)
debe ser efectivamente computable.
Salida paraMakeCoupon(n)
debe ser alfanumérico y debe tener pequeñas yconstante longitud - para que pueda ser llamadolegible por humanos. P.ej.SHA1
digerir no pasaría este requisito.
Unicidad práctica. Resultados deMakeCoupon(n)
para cada naturaln <= N
debe ser totalmente único o único en los mismos términos que, por ejemplo,MD5
Es único (con la misma probabilidad de colisión extremadamente pequeña).
(Este es difícil de definir) No debería ser obvio cómo enumerar todos los cupones restantes de un solo código de cupón, digamosMakeCoupon(n)
yMakeCoupon(n + 1)
debe diferir visualmente
P.ej.MakeCoupon(n),
que simplemente producen
rellenado con ceros fallaría este requisito, porque000001
y000002
en realidad no difieren "visualmente".
¿Existe alguna función o generador de funciones que cumpla con los siguientes requisitos? Mis intentos de búsqueda solo me llevan a[CPAN]
Código promocional, pero no cumple con el requisito de que la función correspondiente sea biyectiva.