2012-09-06 6 views
1

Comment créer mon code de générateur d'ID élégant: Lorsqu'un utilisateur s'enregistre, il reçoit un identifiant .. Quelle est la probabilité que l'ID généré ne soit PAS unique? Aussi - Comment puis-je rendre mon code élégant? MERCI!Générateur de chaîne semi-aléatoire PHP

#hash = random url generated from 128 chars 

$cac = substr($hash, 64,-60); 

$words = array('GET', 'COOL', 'WOW', 'YES', 'NICE', 'BUCK', 'LUCK', 'FUN', 'CASH', 'TIP', 'PEEK', 'TAG'); 
$rword = rand(0,11); 

$syms = array('-', '#', '$', '@'); 
$rsym = rand(0,3); 

$nums = rand(0,9); 

$aff_id_temp = $words[$rword] . $syms[$rsym] . $cac . $nums; 
$final_id = strtoupper($aff_id_temp); 

--- MISE À JOUR --- Le code fonctionne. Juste besoin de générer un identifiant d'affilié simple pour les utilisateurs lors de leur inscription. Par élégant je veux dire - peut-être la façon dont je hacker le code produit final soit fait plus simplement ou d'une manière différente (peut-être dans une boucle) fondamentalement, je veux apprendre différentes façons d'atteindre le même résultat. Je veux d'autres perspectives de codage.

La sortie est quelque chose comme: TIP # 6C1D2

+0

Définissez ce que vous voulez dire par élégance. Soyez précis quel est le problème. Il serait également utile d'avoir un certain contexte quant à ce que vous essayez de faire, et la production attendue. – Brad

+0

Probabilité: '! I' ... :) –

+0

Que diriez-vous de: md5 ($ salt. $ User ['email']); – HappyTimeGopher

Répondre

1

pratiquement nulle, en raison du hachage. Cela dit, cela dépend entièrement de la fonction de hachage. En excluant le hachage, la probabilité qu'un ID donné entre en collision avec un autre ID donné est 1/(12*4*10) = 1/480, soit environ 0,2%. Toutefois, la probabilité qu'un nouvel identifiant ne se heurte à aucun autre identifiant est 1-(1-1/480)^c, où c correspond au nombre d'identifiants que vous possédez déjà. Avec seulement 50 identifiants, vous avez déjà 10% de chances de collision.

Vous pouvez obtenir un hachage unique avec la fonction uniqid.

+0

Mon hash est généré en utilisant un 'rand'1,1B puis' hash' de SHA512 - Comment mon HASH affecte-t-il votre équation? – fyz

+0

En plus du 'HASH', je suis plus intéressé par le $ final_id -> Comment pourriez-vous obtenir le même résultat? J'ai l'impression que leurs solutions sont plus «élégantes» ou différentes. MERCI POUR L'AIDE! – fyz