J'ai conçu une interface utilisateur pour un outil où l'utilisateur doit entrer un "Nom" d'une longueur maximale de 300 caractères, et l'outil génère un fichier texte ("Name" .txt) qui est ensuite téléchargé sur un "serveur" (Mainframe et Unix). Je veux raccourcir la chaîne de 300 caractères en une chaîne de 8 caractères identifiables de manière unique (à cause de problèmes principalement dans le mainframe), quelque chose comme un tinyurl utilisant une sorte d'algorithme de hachage. J'ai trouvé une implémentation SHA1 mais la chaîne résultante a une longueur de 40 caractères. Quelqu'un peut-il suggérer une implémentation VBA pour l'algorithme? L'exigence de la chaîne résultante étant de 8 caractères est stricte - je suppose qu'elle devrait être faisable étant donné que nous avons une limitation sur la taille de la chaîne d'entrée.Convertir une chaîne de 300 caractères en une chaîne de 8 caractères identifiables de manière unique dans VBA
1
A
Répondre
1
Je pense que l'idée de Jens devrait fonctionner très bien. Si vous ne voulez pas tronquer le hachage SHA-1, vous pouvez utiliser un CRC-32 (32 bits ~ 8 caractères ascii de 0..f). (vous pouvez essayer d'utiliser this example) CRC-32 est moins sûr en ce qui concerne les collisions, mais c'est à vous de décider.
3
Vous pouvez simplement prendre les huit premiers caractères du SHA1 Hash.
Ces hachages (comme la version originale de 40 caractères) ne sont pas garantis d'être uniques, cependant. Si vous avez besoin de l'unicité, vous devez probablement stocker chaque nom avec sa version courte quelque part et n'émettre que des noms courts non utilisés jusqu'à présent. (C'est ce que fait tinyurl.)
Questions connexes
- 1. Comment convertir une chaîne en tableau de caractères dans c (ou) comment extraire une chaîne de caractères char unique?
- 2. Convertir une chaîne SQL en liste de caractères
- 3. Comment convertir l'heure en une chaîne de caractères c?
- 4. jQuery - Comment convertir une chaîne de caractères en octets?
- 5. remplacer une chaîne de caractères
- 6. Vérifier la chaîne dans une chaîne de caractères en javascript
- 7. JAVA - comment puis-je convertir une chaîne (UTF-8) en caractères de représentation hexa?
- 8. Recherche de caractères indésirables dans une chaîne
- 9. dés une chaîne de caractères dans JS
- 10. Nombre de caractères dans une chaîne
- 11. C - plage de caractères dans une chaîne
- 12. Convertir une chaîne de 18 caractères à et int
- 13. ajoutant une chaîne de caractères à une autre chaîne
- 14. Enocde Chaîne de caractères en chaîne Octet?
- 15. ID de l'appareil brouillé Blackberry en 8 caractères unique
- 16. python "incrémentant" une chaîne de caractères?
- 17. Comment convertir une chaîne TIS-620 en chaîne UTF-8 en Java?
- 18. java/swing: conversion d'une chaîne de caractères en une forme
- 19. convertir la chaîne de caractères hexadécimale en entier en Java
- 20. Recherche de caractères dans une chaîne en C
- 21. Chargement d'un outbuffer dans une chaîne de caractères en javascript?
- 22. Quelle commande dans VBA peut compter le nombre de caractères dans une variable de chaîne?
- 23. Comment convertir une chaîne de caractères en mots conjoints en JavaScript (& regex?)?
- 24. Manière plus efficace de décaper une chaîne
- 25. Comment convertir une chaîne UTF-8 en chaîne RTF dans Java?
- 26. Comment puis-je convertir DataRow en chaîne de caractères?
- 27. remplacer les caractères dans une chaîne
- 28. Comment convertir une chaîne de valeurs hexadécimales en chaîne?
- 29. comment remplacer certains caractères dans une chaîne?
- 30. Scinder une chaîne en un tableau de caractères en C++
Bien que je n'ai aucune idée des mathématiques statistiques impliquées, mais simplement couper les huit premiers caractères augmentera le risque de collisions grandement. – MvanGeest
@MvanGeest: Oui, ce sera le cas, mais cela pourrait être encore suffisant. Si vous prenez 8 caractères d'un hachage codé en base64, vous avez 64^8 = 2,8E14 combinaisons différentes. Si les hashes sont assez aléatoires, les chances d'une collision atteignent 50% à environ 20 millions d'entrées, avec 2 millions d'entrées vous avez moins de 1% de chance. – Jens