Générer un identifiant de chaîne de caractères

Yo! les geeks,

Suis en train d’installer un système de stats sur un site. Ca se fait par du classique tag javascript dans lequel on indique un numéro de page. Or, mes pages sont des strings (je vous passe les détails). Je cherche la meilleure méthode pour obtenir un nombre entier d’une taille raisonnable qui permet d’identifier une chaine de façon unique. J’ai d’abord pensé à la concaténation du code ASCII, mais la taille n’est plus du tout raisonnable. Il y a aussi l’addition des codes ASCII mais il y a risque de doublons… Une autre idée ?

Thx
Antoine

http://pajhome.org.uk/crypt/md5/

Je ne connais pas d’algo par coeur, même si je sais déjà avoir codé un truc du genre, mais fais une recherche sur google sur les algorithmes de hachage, et tu devrais trouver ton bonheur.

EDIT: grillé :stuck_out_tongue:

Nan, ça génère une chaîne de caractère de type hexadécimal de what-myons de kilomètres de long. Me faut un identifiant entier que le javascript puisse manger. Sinon, j’ai pensé à un truc. Le problème de l’addition des codes ASCII c’est la redondance par présence des mêmes lettres dans deux chaînes (genre « abc » et « cab »). Si j’additionne pour chaque code la position du caractère c’est déjà mieux…

Antoine

Peut en utilisant les operateurs logiques NOR, AND , NAND, etc …

Mais bon tu auras encore des colisions a mon avis :stuck_out_tongue:

Ou alors tu fais une mega table de haschage et encore je sais pas faudrait voir :stuck_out_tongue:

Ben pourquoi une addition ? Tu transforme chaque caractere en code ascii et tu les collent cul à cul. (mais je suis pas sur de voir l’interet intrinseque de pas mettre le nom de la page cela dit).

+1

mais iil a deja essayer la concatenation en asci

Je ne vois pas l’intérêt de réinventer un truc. Les algo de hash qui existent sont optimaux, autant en utiliser un. Effectivement un MD5 c’est encore le mieux, le résultat n’est pas une “chaîne de caractère de type hexadécimal de what-myons de kilomètres de long” mais un nombre de 128 bits qu’on peut représenter comme on veut. Maintenant je ne sais pas ce que javascript peut gérer comme types de données, mais ça dépasse peut-être pas les 64 ou 32 bits. Dans ce cas, il y a des algos de hash plus simples qui permettent un résultat sur 32 bits, CRC32 par exemple.

+1 pour CRC32 ou équivalent.
Perso, je pensais a prendre une partie de ton hash md5.
mais dans tous les cas RIEN ne te garantie que ton hash est différent pour chaque chaine.

Surtout pas MD5, c’est pas du tout fait pour ce scenario, c’est super lent pour aucun benefice. Apres en effet aucun interet de reinventer la roue. A la limite CRC32 oui par exemple… des algos de hash y en a des tas.

[quote=« sista, post:7, topic: 27991 »]+1

mais iil a deja essayer la concatenation en asci[/quote]

ben, abc ca donne du coup 616263 et cba ca fat 636261. Si les noms de fichiers sont différents, les valeurs le seront également de fait :stuck_out_tongue:

C’est certes relativement couteux, probablement même inutilement pour ce type d’usage, mais faut quand même pas pousser. « Super lent », bof. Calculer un MD5 sur une simple chaine qui est déjà en mémoire et qui a priori fait pas trois kilomètres de long, même dans un environnement dévaforable à ce type de traitement, style Javascript, sur une machine raisonnablement contemporaine, on sentira pas grand chose au niveau du temps passé.

Un truc que j’avais utilisé une fois, c’était de transposer la chaîne insensible à la casse d’une base36 (alphanumérique donc) vers la base10 (numérique). Une variante serait en base hexa, suivant le poolde fonctions dont on dispose ensuite. Et bien sûr en rajoutant les caractères en + dans une url complète, on devrait genre partir plutôt sur une base48. Mais bon, à toi d’adapter… :stuck_out_tongue:

Genre ‹ azertyuiop › donnerait 1115496096915481 (à la calculette windows au fond de mon lit avec un chti 39° de fièvre).

Sinon, pour les identifiants unique de chaînes, à part les algos de hashage, il te reste la bonne vieille table auto-incrémentale ID-URL. C’est utilisé sur un des sites que je connais et ça marche pas mal du tout, on s’amuse comme des fous avec. Faut juste de la rigueur au moment de la mise en prod de nouvelles pages (à adapter suivant les sites donc), mais de toute manière, tout le monde l’a, bien sûr… :stuck_out_tongue:

Bon bah merci les gars… Mais en fait je n’en ai plus besoin :stuck_out_tongue:
J’essayais d’installer la version de démo de Weboscope et pour chaque page il est demandé un numéro (donc un identifiant). D’où ma question.
Mais finalement, je suis tombé sur Xiti qui lui permet de nommer chaque page comme bon me semble. Or, comme je fais de l’URL Rewriting à tous les étages, bah c’est joie.
Donc exit Weboscope, welcome Xiti !

Antoine