Puncte:1

Funcția de hashing: generați un identificator unic de 3 litere

drapel cn

Trebuie să creez o funcție de generare a ID-ului care preia un număr din 4 cifre și returnează un identificator unic de 3 litere.

Am deja o funcție care generează un ID de 2 litere dintr-un număr de 3 cifre cu unele limitări (între 100 și 775), dar nu sunt sigur cum să-l schimb pentru a îndeplini noua cerință.

dacă order_id < 775:
  alfabet = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  alpha_index = ''
  _i_1 = 0
  _i_2 = 0
  dacă order_id >=100 și order_id < 775:
    increment = 4*int((order_id-100)/100)
    _mod_100 = order_id%100
    dacă _mod_100 > 25:
      _i_1 = (_mod_100/25)+increment
      _i_2 = _mod_100%25
      alpha_index += alphabet[int(_i_1-1)]
      alpha_index += alphabet[int(_i_2-1)]
    altceva:
      index = str(codul_comandă)[1]+str(codul_comandă)[2]
      index = int(index)
      dacă crește:
        alpha_index = alfabet[increment-1]
      index_alfa += alfabet[index] 
    alpha_order_id = alpha_index+str(codul_comanda)[3:]
altceva:
  alpha_order_id = order_id

Orice ajutor este apreciat.

kelalaka avatar
drapel in
26$^3 = 17576 > 9999$. doar înmulțiți cu $x$ luați mod 17576?
fgrieu avatar
drapel ng
Aceasta este o întrebare de programare elementară, fără relevanță pentru criptografie.
Paul Uszak avatar
drapel cn
@fgrieu Nicio relevanță? Nimic? Hashing - nu? Unicitatea răspunsului - nu? Introducere în hashurile criptografice (soluția) - nu? Hashing universal - nu? Nu așa se poate crește baza de utilizatori fgrieu.
Majed Badawi avatar
drapel cn
@fgrieu Nu sunt sigur ce este elementar și de ce a fost marcat ca „off-topic”. Nu am experiență în criptografie și speram să primesc ceva ajutor. Am explicat clar problema și am arătat încercarea. Vă rugăm să indicați unde să puneți această întrebare dacă acest loc nu este locul potrivit pentru aceasta (DBA, SO...)
fgrieu avatar
drapel ng
Întrebarea pusă nu este despre criptografie: singura mențiune despre hash este în titlu, nu în declarația problemei. Este vorba despre o schimbare a bazei de numerație: de la 4 cifre în baza 10 la 3 cifre | caractere în baza 26. Schimbarea bazei este matematică/informatică elementară, nu criptografie. Sugestie: din motivul din primul comentariu, orice combinație de 4 cifre în baza 10 poate fi exprimată ca 3 cifre|caractere în baza 26.
Majed Badawi avatar
drapel cn
@fgrieu cum ar trebui generată a treia literă în soluția de mai sus pentru a garanta o ieșire unică de fiecare dată dintr-un număr de 4 cifre? Caut o modalitate de a schimba soluția de mai sus pentru a sprijini acest lucru. Orice alte indicii sau algoritmi de cercetare sunt apreciate.
fgrieu avatar
drapel ng
Vă voi da un exemplu și vă las să scrieți codul (pe care vă sugerez să îl faceți de la zero). Să presupunem că doriți să convertiți 9876 în 3 cifre|caractere în baza 26. Calculăm 9796%26=22, codificat de caracterul „W”. Rămâne de codat 9796//26=379.Calculăm 379%26=15, codificat prin caracterul `P`. Rămâne de codat 379//26=14 (știm că rezultatul este mai mic de 26 din motivul pentru care Kelalaka l-a dat în comentariu), codificat cu caracterul „O”. Adesea, în schimbarea bazei, scriem rezultatul cu primul caracter obținut în dreapta: `OPW`. Din nou, aceasta este schimbarea de bază sau codificarea.
Paul Uszak avatar
drapel cn
Mai degrabă decât codul tău, ce zici de o funcție hash criptografică, de ex. SHA-x/MD5? Și astfel `H(input) >> n` unde n este un număr adecvat de drepturi de schimbare pentru a obține 3 caractere. Deoarece mergi 4 la 3, caută principiul Pigeon Hole și ce este o suprajecție. Și diferența dintre o funcție hash simplă precum hashCode Java și una criptografică.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.