Hogyan tudok PHP-ban úgy random számsort generálni, hogy az ne ismétlődhessen? A már generált számokat adatbázisba kéne írnom? Szeretném ezt elkerülni, valami más módszer nincsen?





Egyelőre ennyit csináltam:
$chancode = $userid * $partnerID + 100;
Ez teszteléshez ugye kiváló, de több felhasználó esetén már ugye nem biztonságos. Hiába tér el minden felhasználód ID-je, de kettő összege bizony megegyezhet.
Talán egy próbát megér:
$input = $userid.$partnerID.$username.$partnerName;
$encrypted = encryptIt( $input );
function encryptIt( $q ) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qEncoded = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}
$chancode = substr($encrypted, -20, 10);
Nem random, hanem a két felhasználó adataiból generál, elvileg mindig azt adja vissza két felhasználónál és nem ismétlődik.





#4: "Kettes ez nem ad garanciát az ismétlődés kizárására."
A generáláskor (a topiknyitó kérdésben nem volt szó chatről, meglevő paraméterekről, stb...) igen. A számsort tartalmazó tömbben nincs ismétlődés,
#5: "És szerintem maga az összekeverés sem ad garanciát."
a shuffle() meg véletlenszerű keverést biztosít (PHP 7.1.0 óta - - a Mersenne Twister módszerével: [link] )
#3: Összefűzöd (lásd: összefűzési operátor: [link] ) karakterláncként ( [link] ) őket - így egyedi - és képzed ezek ellenőrzőösszegét - így biztonságos (főleg ha password_hash() - [link] - segítségével képzed).
Ha jól értem csak számokat akarsz generálni. Itt a kód egy kissé feljavítva. :)
$input = $userid.$partnerID.$username.$partnerName;
$encrypted = encryptIt( $input );
function encryptIt( $q ) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qEncoded = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}
$binhash = substr($encrypted, -20, 10);
$chancode = base_convert( md5( $binhash ), 16, 10 );
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!