J'ai des nombres dans la plage 1-62 Je veux être en mesure de les "crypter", de sorte qu'il est difficile de deviner qu'ils sont générés dans un certain ordre.Numéros de réorganisation
Ainsi, il devrait y avoir une cartographie, par exemple
1-> 35 2-> 3- 19 > 61 ...
de sorte que j'ai 1 à 1 mapping, 100 % réversible.
je peux hardcode la cartographie, mais je préférerais une solution de mathématiques à cela, une sorte de formule qui prend comme argument numéro, et produit nombre dans la gamme 1-62, et ne génère pas de doublons. Y a-t-il une chance que cette formule existe?
Juste pour l'histoire, le script de validation:
<?
$test = array();
$val = 37;
for($i=0;$i<62;$i++)
{
if($test[($i*$val)%62])
{
print("Collision: $i ".$test[($i*$val)%62]."<br/>");
}
$test[($i*$val)%62] = $i;
print("$i => ".(($i*$val)%62)."<br/>");
}
?>
Mise à jour:
Voici les identifiants générés grâce à ces réponses:
qpOLHk
NMb84H
aI740D
x5urn0
UsROKn
hPeb7K
EcByu7
1zYVRu
oWlieR
LjIFBe
8G52YB
v3splY
SqPMIl
fNc95I
Cazws5
ZxWTPs
mUjgcP
JhGDzc
6E30Wz
:-) Sweeeeeet
Cela vaut pour le codage en dur que je considérais.la graine statique ferait, mais j'ai peur que ce soit trop de traitement, j'ai besoin de quelque chose de simple ... – BarsMonster
@BarsMonster: Combien de traitement est autorisé? Et quelle partie de cet algorithme considérez-vous comme trop chère? –
Ceci serait effectué 10'000 fois par seconde en langage interprété. Alors que je vois que votre solution correspond probablement en termes de performance, j'aime vraiment avoir quelque chose comme output = (input + 35)% 62, mais un peu plus aléatoire. – BarsMonster