Je crée une base de données orientée fichier de certains résultats de test effectués par divers utilisateurs. Pour cela, j'ai besoin de générer un identifiant unique pour chaque entrée dans la base de données. Les ids doivent satisfaire aux exigences suivantes:Comment créer des identifiants uniques en Perl?
- Ids devrait être assez petit (6 caractères maximum)
- Pour tous les cas de test et la combinaison de l'utilisateur à chaque fois même id doit être généré
Ce que j'ai essayé était une simple fonction de hachage BKDR avec une valeur de 31 graines et utilisé la fonction ord() comme suit:
@chars = split(//,$hash_var);
$hash = 0;
$seed = 31;
foreach $char (@chars) {
if($char !~ m/\d/) {
$hash = ($seed * $hash) + ord($char);
}
else {
$hash = ($seed * $hash) + $char ;
}
}
$hash = ($hash & 0x7FFFFFFF) % 1000;
$hash = "$chars[0]$chars[$#chars]$hash" ;
Cela conduit parfois à des résultats même pour diverses combinaisons u ie la nicotité n'est pas observée. Est-ce leur tout autre moyen d'accomplir cela? La modification de la valeur des graines aide-t-elle à réaliser l'unicité.
La dernière phrase (hashing risk collision) vaut +1 tout seul. –