Autor | Zpráva | ||
---|---|---|---|
blahapet Profil |
#1 · Zasláno: 19. 8. 2024, 05:39:28
Ahojky, generuji náhodný 12ti místný kód skládající se z velkých písmen a číslic. Můžu mít otázku, co dělám špatně, když jednou to vygeneruje 12 znaků, ale podruhé třeba jen jedenáct, ale také deset nebo devět:
$a1 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $a2 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $a3 = array("1","2","3","4","5","6","7","8","9"); $a4 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $a5 = array("1","2","3","4","5","6","7","8","9"); $a6 = array("1","2","3","4","5","6","7","8","9"); $a7 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $a8 = array("1","2","3","4","5","6","7","8","9"); $a9 = array("1","2","3","4","5","6","7","8","9"); $a10 = array("1","2","3","4","5","6","7","8","9"); $a11 = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $a12 = array("1","2","3","4","5","6","7","8","9"); $_a1 = rand(0, count($a1)); $_a2 = rand(0, count($a2)); $_a3 = rand(0, count($a3)); $_a4 = rand(0, count($a4)); $_a5 = rand(0, count($a5)); $_a6 = rand(0, count($a6)); $_a7 = rand(0, count($a7)); $_a8 = rand(0, count($a8)); $_a9 = rand(0, count($a9)); $_a10 = rand(0, count($a10)); $_a11 = rand(0, count($a11)); $_a12 = rand(0, count($a12)); echo $a1[$_a1].$a2[$_a2].$a3[$_a3].$a4[$_a4].$a5[$_a5].$a6[$_a6].$a7[$_a7].$a8[$_a8].$a9[$_a9].$a10[$_a10].$a11[$_a11].$a12[$_a12]; Děkuji za pomoc. |
||
Kajman Profil |
rand(0,9) může vrátit 10 možností i když pole má 9 prvků a prvek $pole[9] neexistuje. Vypisujte si chyby včetně notice. Edit: Ten kód je hrůza.
|
||
Andrej.B Profil |
#3 · Zasláno: 19. 8. 2024, 07:57:52
rychly check u AI.
$letters = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $numbers = array("1","2","3","4","5","6","7","8","9"); // Kombinácia polí, kde je daný index polí, ktorý sa má použiť. $combination = array($letters, $letters, $numbers, $letters, $numbers, $numbers, $letters, $numbers, $numbers, $numbers, $letters, $numbers); // Výstupný reťazec $result = ""; foreach ($combination as $array) { $result .= $array[array_rand($array)]; } echo $result; |
||
blahapet Profil |
#4 · Zasláno: 19. 8. 2024, 09:36:53
Andrej B. - díky moc!
|
||
N71 Profil * |
#5 · Zasláno: 19. 8. 2024, 12:54:34
Připomíná to trochu soutěž o to, jak nejvíc prasecky generovat "náhodné" řetězce, pánové. A Andrej.B si příště kódy generované jazykovými modely ponechá pro sebe a nebude je vydávat za nějakou radu.
Osobně bych volil spíš kryptograficky bezpečný zdroj náhodných dat, jako random_bytes() a pak psal něco jako: substr(strtoupper(preg_replace('/\W/', '', base64_encode(random_bytes(30)))), 0, 12); |
||
blahapet Profil |
#6 · Zasláno: 21. 8. 2024, 20:07:46
N71:
Díky moc i Vám, to jsem potřeboval. |
||
Časová prodleva: 4 měsíce
|
|||
blahapet Profil |
#7 · Zasláno: 30. 12. 2024, 16:38:07
Ahoj, omlouvám se, že vytahuji starou věc - generování náhodného kódu. Vytvořil jsem dle Andreje B. funkci, která takto normálně funguje:
function generateRandomCode(){ $letters = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $numbers = array("1","2","3","4","5","6","7","8","9"); $combination = array($letters, $letters, $numbers, $letters, $numbers, $numbers, $letters, $numbers, $numbers, $numbers, $letters, $numbers); $result = ""; foreach ($combination as $array) { $result .= $array[array_rand($array)]; } return $result ; } Chtěl byc tuto fci zuniverzálnit a vložit možnost typu a počtu znaků přímo do funkce, tzn., že proměnná $combination by byla parametrem funkce. Můj pokus byl takovýto: function generateRandomCode($code = array()){ $letters = array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); $numbers = array("1","2","3","4","5","6","7","8","9"); $combination = []; foreach ($code as $characters) { if($characters == 0){ $combination[] .= $letters; } if($characters == 1){ $combination[] .= $numbers; } } $result = ""; foreach ($combination as $array) { $result .= $array[array_rand($array)]; } return $result ; } Moje představa dosazení parametru do funkce byla 0 = písmeno, 1 = číslice: generateRandomCode(array(0, 1, 0, 1, 0, 0, 1)); Ale vrací mi to string :-( Warning: array_rand() expects parameter 1 to be array, string given in C:\wamp64\www\blahapet\blahapet\views\kontakt.php on line 47 Neřešte prosím bezpečnost této funkce (viz. konverzace výše), jen chci rozluštit oříšek, proč jsem takové tele... Díky moc ;-) |
||
Str4wberry Profil |
#8 · Zasláno: 30. 12. 2024, 20:31:15
Problém bude asi v
$combination[] .= $letters; , kde se místo přidávání prvku do pole přidává řetězec. Takže možná jen vyhodit tu tečku.
|
||
blahapet Profil |
#9 · Zasláno: 31. 12. 2024, 07:47:05
Tak to jsem netušil, že to mohlo být takovou prkotinou. Moc děkuji.
|
||
Časová prodleva: 6 měsíců
|
0