Générer un id unique
Je suis un étudiant à l'université, et notre tâche est de créer un moteur de recherche. J'ai de la difficulté à générer un id unique à attribuer à chaque url, lorsqu'il est ajouté à la frontière. J'ai essayé en utilisant le hachage SHA-256 de l'algorithme ainsi que les Guid. Voici le code que j'ai utilisé pour mettre en œuvre le guid:
public string generateID(string url_add)
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
string number = String.Format("{0:d9}", (DateTime.Now.Ticks / 10) % 1000000000);
return number;
}
- Un GUID est lié à être unique au monde (d'où le nom), donc je ne comprends pas le problème.
- Je pense que son souci est qu'il veut que l'IDENTIFIANT unique basé sur l'URL, donc un one-way hash de l'URL d'un ID unique. Dans ce cas, SHA1 serait de travailler.
- Il y a toujours objet.GetHashCode(). Bien que je ne pense pas que la garantie unique.
- c'est à peu près garanti de ne pas être unique
- la réponse est facile:
return url_add;
- Comme mentionné dans les réponses, découvrez Guid.NewGuid().
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas simplement utiliser ToString?
Si vous souhaitez qu'il soit basé sur une URL, il vous suffit d'effectuer les opérations suivantes:
Si vous voulez cacher l'URL, vous pouvez utiliser une certaine forme de SHA1 sur le sourceURL, mais je ne suis pas sûr de ce que pourrait atteindre.
String.Format("{0}_{1:N}", sourceUrl, Guid.NewGuid())
Pourquoi ne pas utiliser GUID?
Ici est un "YouTube-video-id' comme id du générateur par exemple "UcBKmq2XE5a"
Il crée aléatoire id de taille 11 caractères. Vous pouvez augmenter/diminuer le aussi, il suffit de changer le paramètre de la méthode de Prendre.
À 0,001% de doublons dans 100 millions de dollars.
Si vous souhaitez utiliser sha-256 (guid serait plus rapide) alors vous devez faire quelque chose comme
Bien sûr, il n'a pas à ascii et il peut être tout autre type d'algorithme de hachage ainsi
Pourquoi ne pouvons-nous pas faire une id unique en tant que ci-dessous.
Nous pouvons utiliser DateTime.Maintenant.Les tiques et les Guid.NewGuid().ToString() de combiner ensemble et de faire une id unique.
Comme DateTime.Maintenant.Les tiques est ajouté, nous pouvons trouver la Date et le Temps en secondes pendant lequel l'identifiant unique est créé.
Veuillez voir le code.
On peut même faire la part des tiques en identifiant unique et vérifiez la date et le temps plus tard pour référence future.
Cette question semble être répondu, cependant, pour être complet, je voudrais ajouter une autre approche.
Vous pouvez utiliser un numéro d'identification unique générateur qui est basé sur Twitter Flocon de neige id du générateur. C# de la mise en œuvre peut être trouvé ici.
Noter que l'une des caractéristiques très agréable de cette approche est la possibilité d'avoir de multiples générateurs de nœuds indépendants (probablement quelque chose d'utile pour un moteur de recherche) de générer en temps réel, globally unique identifiers.