2010-08-06 9 views
-1

Nous avons une chaîne alphanumérique (jusqu'à 32 caractères) et nous voulons la transformer en un entier (bigint). Nous cherchons maintenant un algorithme pour le faire. La collision n'est pas mauvaise (donc nous utilisons un bigint pour l'empêcher un peu), ce qui est important, c'est que les entiers calculés soient constamment distribués sur une plage bigint et que l'entier calculé soit toujours le même pour une chaîne donnée.Comment avoir un hachage bigint pour une chaîne

+1

Qu'est-ce que vous utilisez la langue? –

+1

Quelle langue utilisez-vous? – Oded

+0

Ah, je pensais seulement à une définition pour un algorithme, mais je peux utiliser PHP, Perl ou Python pour cela. – user387678

Répondre

0

La plupart des langages de programmation sont livrés avec une construction intégrée ou un appel de bibliothèque standard pour ce faire. Sans connaître la langue, je ne pense pas que quiconque puisse vous aider.

+0

Un appel de bibliothèque standard pour transformer une chaîne alphanumérique (telle que "123qza5") en bigint? Je pense que la question est assez claire de ce qui est nécessaire. – Chowlett

+0

J'ai effectivement lu la question comme "interpréter une chaîne comme un nombre", pas "calculer un hachage numérique pour une chaîne". – tdammers

2

This page en a quelques uns. Vous aurez besoin de porter en 64bit, mais cela devrait être trivial. Un port C# du hachage SBDM est here. Une autre page de fonctions de hachage here

+0

Je vais jeter un oeil à cette – user387678

0

Oui, un "hash" devrait être la bonne description de mon problème. Je sais, qu'il y a CRC32, mais il ne fournit qu'un int de 32 bits (en PHP) et ces entiers de 32 bits ont au moins 10 caractères de long, donc une énorme plage de nombres entiers est inutilisée !? Surtout, nous avons une chaîne courte comme "PX38IEK" ou un UUID de 36 caractères comme "24868d36-a150-11df-8882-d8d385ffc39c", donc les chaînes sont arbitraires, oui.

Il ne doit pas être réversible (donc les collisions ne sont pas mauvaises). Peu importe à quel point une chaîne est convertie, mon seul souhait est que la plage complète de bigint soit utilisée le mieux possible.

Questions connexes