Generowanie kodu kuponu
Chciałbym wygenerować kody kuponów, np.AYB4ZZ2
. Chciałbym jednak również móc oznaczyć używane kupony i ograniczyć ich globalną liczbę, powiedzmyN
. Naiwne podejście byłoby czymś w rodzaju"GenerowaćN
unikalne kody alfanumeryczne, umieść je w bazie danych i wykonaj wyszukiwanie db przy każdej operacji kuponu. ”
Jednak, o ile sobie uświadamiam, możemy równieżspróbuj znaleźć funkcję MakeCoupon(n)
, który konwertuje podaną liczbę na ciąg przypominający kupon o określonej długości.
Z tego co rozumiemMakeCoupon
powinien spełnić następujące wymagania:
Bądź bijective. Jest odwrotnieMakeNumber(coupon)
powinny być skutecznie obliczalne.
Wyjście dlaMakeCoupon(n)
powinny być alfanumeryczne i powinny być małe istały długość - aby można było ją nazwaćczytelny dla człowieka. Na przykład.SHA1
trawienie nie spełniłoby tego wymogu.
Praktyczna wyjątkowość. WynikiMakeCoupon(n)
dla każdego naturalnegon <= N
powinien być całkowicie unikalny lub niepowtarzalny na takich samych warunkach, jak na przykładMD5
jest unikalny (przy tym samym bardzo małym prawdopodobieństwie kolizji).
(ten jest trudny do zdefiniowania) Nie powinno być oczywiste, jak wyliczyć wszystkie pozostałe kupony z kodu pojedynczego kuponu - powiedzmyMakeCoupon(n)
iMakeCoupon(n + 1)
powinny się różnić wizualnie.
Na przykład.MakeCoupon(n),
co po prostu generujen
wypełnione zerami nie spełniłoby tego wymogu, ponieważ000001
i000002
właściwie nie różnią się „wizualnie”.
Czy istnieje jakaś funkcja lub generator funkcji, który spełnia następujące wymagania? Moje próby wyszukiwania prowadzą mnie tylko do[CPAN]
Kod kuponu, ale nie spełnia wymogu, że odpowiednia funkcja jest bijective.