Kezdőoldal » Számítástechnika » Programozás » Hogyan tudok PHP-ban úgy...

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?

Figyelt kérdés
2022. jan. 1. 12:48
1 2
 1/15 A kérdező kommentje:
Ha valaki tudna írni egy olyan kódot, ami garanciát ad arra, hogy nem ismétlődhet meg a számsor, pl gondolkodom időbélyegből generáláson, azt nagyon megköszönném!
2022. jan. 1. 12:49
 2/15 anonim ***** válasza:

1. Generálsz egy számsort tartalmazó tömböt a range() függvény segítségével:

[link]


2. Összekevered a shuffle() függvény segítségével:

[link]

2022. jan. 1. 12:55
Hasznos számodra ez a válasz?
 3/15 A kérdező kommentje:
Áhh bocs, nem is jó az időbélyeg. Egy chathez kéne a kód ahol a privát beszélgetés ID-je ként szeretném használni, és azt szeretném, ha a felhasználó visszatér ugyanezt a privátot tudja folytatni. Tehát valahogyan a két résztvevő userID-jéből kéne generálni, hogy bármikor máskor ha privátot nyitnak az ID megegyezzen a korábban már generálttal.
2022. jan. 1. 12:55
 4/15 A kérdező kommentje:
Kettes ez nem ad garanciát az ismétlődés kizárására. Random generált kód bármikor újragenerálódhat, nem? Lehet tévedek, ennyire nem ismerem a PHP-t de szerintem ismétlődhet.
2022. jan. 1. 12:57
 5/15 A kérdező kommentje:
És szerintem maga az összekeverés sem ad garanciát. Lehet hogy eltérő kódot generálok és aztán a keverésnél pont úgy keveredik, hogy megegyezik egy előzővel.
2022. jan. 1. 12:58
 6/15 A kérdező kommentje:

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.

2022. jan. 1. 13:01
 7/15 A kérdező kommentje:
Kettő szorzata, bocs. :)
2022. jan. 1. 13:02
 8/15 anonim válasza:
8%

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.

2022. jan. 1. 14:13
Hasznos számodra ez a válasz?
 9/15 anonim ***** válasza:

#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).

2022. jan. 1. 14:18
Hasznos számodra ez a válasz?
 10/15 anonim válasza:
8%

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 );

2022. jan. 1. 15:00
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!