2016-03-30 7 views
0

Ich habe die folgenden Strings:Node.js 10 Digit Hash-Code von String

"184500000712_1_new_store1", 
"184500000712_4_new_store1", 
"184500000712_12_new_store1", 
"195600000819_1_new_store2", 
... 

Ich versuche, jede einzelne Saite in einen einzigartigen 10-stelligen Code zu drehen wie so:

184500000712_1_new_store1 => K14K4O9WVQ 
184500000712_4_new_store1 => E93N7L2PXC 
184500000712_12_new_store1 => A89F5I6JIO 
195600000819_1_new_store2 => J00B1I5KFU 

Auch die String-to-Code-Ausgabe muss immer konsistent sein. Fe, utf-8 base64 Codierung der Zeichenfolge 184500000712_1_new_store1 würde immer ausgegeben der Code MTg0NTAwMDAwNzEyXzFfbmV3X3N0b3JlMQ==

Dank!

+0

Wenn Sie jede der Strings in 7,5 Bytes komprimieren können (ja, ich meine 60 Bit), dann können Sie eine pseudozufällige Permutation verwenden, um einen eindeutigen resultierenden Wert zu erhalten. Wenn Sie es nicht komprimieren können, besteht die einzige Möglichkeit darin, eine (potenziell riesige) Karte bekannter Eingaben und zufällig erzeugter Ausgaben zu verwalten. –

+0

Schön! Ich hatte nicht an Kompression gedacht. Ich habe einige Zeichenfolgen, die 10X der Länge der Beispielzeichenfolgen sind. Konnte die Komprimierung immer noch die Eindeutigkeit beibehalten – user1828780

+0

Wie gesagt, Sie müssten die Eingabe-Strings auf 60 ** Bits ** komprimieren. Dies wäre nur möglich, wenn sie tatsächlich von geringer Entropie sind, oder Sie können einen Weg finden, sie selbst zu komprimieren, weil Sie darin eine Art Regel sehen können. Wenn du das nicht kannst, hast du kein Glück. Das Beste, was Sie dann tun können, ist die Verwendung einer Hash-Funktion, die Ausgabe auf 60 Bit abschneiden, die Base64-Codierung verwenden und die Füllzeichen entfernen. Eine kryptografische Hash-Funktion garantiert keine Eindeutigkeit, aber Kollisionen sind unwahrscheinlich. –

Antwort

0

Wenn es braucht nicht eine sichere Hash zu sein (was sie wahrscheinlich nicht gegeben werden, dass es nur 10 Zeichen ist), können Sie diese Antwort überprüfen für einen schnellen Hash-Generator: Generate a Hash from string in Javascript/jQuery

Truncate die Saite auf deine gewünschte Länge und du solltest ok sein. Je nachdem, wie viele davon erstellt werden, müssen Sie möglicherweise auf Kollisionen achten.