Iš smalsumo: kaip generuojami serijos numeriai? Patarimai, algoritmai?

Įdomu, kaip veikia serijos numerio generatoriai ir validatorius. Mano tikslas būtų sukurti penkių dalių serijos numerį, kurį sudaro tik skaičiai ir raidės.

Man patinka koduoti kaip hobis ir nekviesti profesionalaus programuotojo. Nepaisant to, labai domiuosi, kaip šios įdomios funkcijos techniškai veikia, kad išplėstų mano mintis.

Vertinami bet kokie patarimai, patirtis ar rašytiniai algoritmai.

38
03 апр. Simono nustatytą balandžio 3 d. 2009-04-03 22:08 '09 10:08 val. 2009-04-03 22:08
@ 7 atsakymai

Brandon Staggs parašė gerą straipsnį apie dalinės eilės numerių tikrinimo sistemos įdiegimą . Pavyzdžiai yra parašyti „Delphi“, bet gali būti konvertuoti į kitas kalbas.

24
03 апр. atsakymas pateikiamas stukelly 03 Bal. 2009-04-03 22:44 '09, 22:44 PM 2009-04-03 22:44

Na, tradiciškai serijos numeriai yra serijos numeriai. Taigi, pirmasis pavyzdys iš gamybos linijos turi sn 0001, tada kitą 0002, o kitas - 0003. Manau, kad dauguma žmonių gali išspręsti šį algoritmą.

Manau, kad iš tikrųjų prašote produkto raktų, kurie naudoja panašų mechanizmą viešojo rakto pranešimo pasirašymui - produkto raktas yra užšifruota vertė, programa turi viešąjį raktą, leidžiantį patikrinti, ar raktas yra galiojantis, bet tik programinės įrangos tiekėjas turi paslaptį klavišą „pasirašyti“ produkto raktą. Vikipedijos straipsnis skaitmeniniuose parašuose turi bendrą mechanizmą; vienintelė sąlyga yra tai, kad vartotojas galėtų įvesti raktą, jis turi būti šiek tiek trumpesnis už PGP.

Jei esate apribotas labai trumpu serijos numeriu, mažai tikėtina, kad jis bus pakankamai didelis, kad išsaugotų tipinio pasirašymo mechanizmo rezultatą, ir šiuo atveju gana dažnai naudojasi tam tikra kontroline suma. Trūkumas yra tas, kad jį lengva rekonstruoti - saugumas yra todėl, kad algoritmas yra „slaptas“, o ne dėl bet kokių kriptografinių savybių. Kiekvienas produktas turės savo algoritmą, ir paprastai jie greitai įtrūksta.

Jei turite 5 blokus iš 5 simbolių, turite 36 ^ 25 kombinacijas, kurios yra daugiau nei 2 ^ 128, todėl galite naudoti vieną iš standartinių skaitmeninio parašo algoritmų, kurie generuoja 128 bitus ir tada konvertuoja šią vertę į bazę 36.

16
03 апр. Atsakymą pateikė Pete Kirkham 03 Bal. 2009-04-03 22:18 '09, 10:18 PM 2009-04-03 22:18

Gaukite viešą / privatų raktą . Sukurti sekos numerius (10 000, 20 000, 30 000, 40 000, ....), kurie turi tam tikrą identifikavimo charakteristiką (pavyzdžiui, yra suskirstyti į 10 000). Šifruoti šį numerį naudodami privatų raktą. Šią vertę koduokite naudodami tam tikrą žmogui nuskaitomą sistemą ( 32 arba 64 bazę ) ir padalinkite vertybes į grupes, kad būtų lengviau suprasti žmones. Paskirstykite koduotą serijos numerį su kiekvienu savo paraiškos pardavimu.

Kažkur programoje turite paslėptą raktą. Kai vartotojas įveda koduotą serijos numerį, pirmiausia jį dekoduokite atgal į dvejetainį. Naudokite viešąjį raktą iššifruoti. Įsitikinkite, kad jis padalintas iš 10 000.

Sunkus įgyvendinimo etapas yra paslėpti viešąjį raktą programoje, todėl jis negali būti lengvai pakeistas. Pasirinkite seką, kurią galite lengvai atpažinti, bet ne išnaudoti vertes. Užblokuokite programą, kad niekas negalėtų lengvai praleisti viso patikrinimo. ir tt ...

15
03 апр. atsakymą pateikė Eclipse 03 Bal 2009-04-03 22:25 '09 22:25 pm 2009-04-03 22:25

Galite naudoti atsitiktinių skaičių generatorių ir saugoti išėjimus į duomenų bazę. Aktyvinimo užklausos atveju tiesiog patikrinkite, ar serijos numeris yra duomenų bazėje, ir žymi serijos numerį kaip „naudojamą“.

Žinoma, tam reikalingas interneto ryšys, tačiau tai yra naudinga prieš „pirkti vieną kartą, naudokite daug ir daug kartų“ metodą, o jei palaikote skambutį, galite pakartotinai suaktyvinti šį serijos numerį kitam įdiegimui.

Toliau redaguokite: taip pat turite naudoti užšifruotą ir autentišką ryšį, pvz., HTTPS, kad galėtumėte patikrinti internetą.

3
03 апр. atsakymas pateikiamas adrians 03 apr. 2009-04-03 22:43 '09, 10:43 val. 2009-04-03 22:43

GUID („Visuotinai unikalus identifikatorius“) gali būti paprastas būdas išspręsti šią problemą:

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

Giduose yra 16 baitų ir dažniausiai rašomi tekstuose kaip šešioliktainių skaitmenų seka, pavyzdžiui:

 3F2504E0-4F89-11D3-9A0C-0305E82C3301 

Dauguma programavimo kalbų turėtų sugebėti generuoti GUID iš vienos iš turimų bibliotekų.

3
04 апр. atsakymas pateikiamas mjn 04 balandžio. 2009-04-04 00:25 '09 ne 0:25 2009-04-04 00:25

Naudodamas „google-foo“, aš atėjau šį straipsnį:

http://www.mactech.com/articles/mactech/Vol.13/13.02/SerialNumberGenerator/index.html

1
03 апр. Atsakymą pateikė Gavin Miller 03 Bal. 2009-04-03 22:13 '09, 10:13 PM 2009-04-03 22:13
0
03 апр. Atsakymas duotas 03ıu 03 Bal. 2009-04-03 22:17 '09, 10:17 val. 2009-04-03 22:17

Žr. Kitus klausimus apie etikečių arba Užduoti klausimą