2017-04-15 3 views
0

Existe-t-il un moyen de générer un UUID où nous pouvons contrôler les premiers octets d'un UUID, en fonction des entrées?Existe-t-il un moyen de générer un UUID où les premiers octets sont fixés en fonction des entrées?

Par exemple, je voudrais une fonction comme:

string generateUUID(string input); 

où si je l'ai appelé comme ce qui suit:

generateUUID('a') = 00000001-6f42-4d44-acc4-fda717886945 
generateUUID('a') = 00000001-9279-48c1-8695-ff088504b800 
generateUUID('a') = 00000001-2a6d-4cba-85d5-aabe94bdb5bd 

generateUUID('b') = 00000002-2a6d-4cba-85d5-aabe94bdb5bd 
generateUUID('b') = 00000002-b46f-4427-83d5-f1244a9f1102 
generateUUID('b') = 00000002-5de1-4b7c-94be-5bf07a749e82 

etc.

Par conséquent, si les 8 premiers caractères de l'uuid est 00000001, alors je sais que 'a' était l'entrée, etc.

Quelque chose comme t son disponible?

+0

Pourquoi avez-vous besoin de changer 8 octets en fonction de la valeur de 8 bits? Cela représente un gaspillage considérable et réduit considérablement l'espace des UUID distincts. Pourquoi vous pensez-vous que vous devez faire cela du tout? – EJP

+0

Merci pour votre réponse. J'ai besoin d'identifier l'auteur d'un uuid sans aucune autre information, et j'essaye de comprendre si quelque chose comme ceci est faisable sans affecter la qualité de l'uuid. – Ste

Répondre

2

Générez simplement un UUID normalement, comme avec UUID.randomUUID(), puis convertissez-le en une chaîne avec UUID.toString(), puis remplacez finalement les 8 premiers caractères comme vous le souhaitez.

+0

Bien. Simple. Cependant, il est important de noter que, ce faisant, vous augmentez le risque de collisions UUID de 2^N où N est le nombre de bits que vous volez. Dans ce cas N est 24. –

+0

Merci pour votre réponse. À quel moment N devient-il significatif? Par exemple, si je n'utilise que le premier 2 ou 3 caractères, la probabilité de collision diminue-t-elle jusqu'à devenir insignifiante? – Ste

0

Les UUID ont une méthode: public static UUID fromString (nom de chaîne). C'est ce dont vous avez besoin

+0

Mais comment générer le nom avec les propriétés appropriées? –

+0

Cette méthode est déterministe. Je pense que OP veut toujours le hasard. – sturcotte06