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

Q:

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

Respuestas a la pregunta(5)

Su respuesta a la pregunta