Random strängar med PHP

PHPportalen Forum Index » Tips och Trix
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
LimpanDSS



Medlem i: 2427 dagar
Från: Stockholm
Status: Offline



#730893
Inlägg Skrivet: 2013-04-02 20:54      Ämne: Random strängar med PHP Citera

Kan vara bra att ha om du någon gång vill skapa random strängar.
KOD:
1:
 
2:
$random_string = "";
3:
 
4:
//De bokstäver du vill att strängen ska innehålla
5:
$letters = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9";
6:
 
7:
//Gör om till en array
8:
$array_of_letters = explode(" ", $letters);
9:
 
10:
//Blanda array
11:
shuffle($array_of_letters);
12:
 
13:
//Skapa random sträng
14:
foreach($array_of_letters as $letter) {
15:
      $random_string .= $letter;
16:
}
17:
echo $random_string;
18:
 

Det finns andra sätt att göra det på, enligt mig är dock denna enklast att skriva.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
grejvonklas



Medlem i: 3772 dagar

Status: Offline



#730896
Inlägg Skrivet: 2013-04-02 23:00      Ämne: Citera

Själv föredrar jag detta sätt, mindre kod också.

PHP:
1:
 function RandomString($chars 62) {
2:
   return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0$chars);
3:
}
4:
 
5:
// Används på detta sätt för att skriva ut en random-sträng på 62 tecken.
6:
// Går även att skriva in nr som nedan för att bara få ut ett visst antal tecken.
7:
echo RandomString();
8:
echo RandomString(15); 


Huruvida denna kod är bättre än din vet jag inte.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Pake



Medlem i: 2608 dagar

Status: Offline



#730897
Inlägg Skrivet: 2013-04-03 11:38      Ämne: Citera

Ingen av de ovanstående klarar väl av att skapa strängar som är längre än det antal tecken som ingår i ursprungssträngen och dessutom inte ha med samma tecken mer än en gång eller har jag missat något?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Figgy



Medlem i: 4802 dagar

Status: Offline



#730899
Inlägg Skrivet: 2013-04-03 11:54      Ämne: Citera

Otestat men borde vara färdigt för exekvering enligt Pakes svar.

PHP:
1:
 /**
2:
 * Klarar inte multibyte, man får köra en explode på library innan isf.
3:
 *
4:
 * @param integer $chars
5:
 * @param string $seed
6:
 */
7:
function randStr ($chars 10$seed "")
8:
{
9:
   $library "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" $seed;
10:
   $string "";
11:
 
12:
   for ($i 0$i $chars$i++)
13:
      $string .= $library{rand(0strlen($library))};
14:
   return $string;
15:
 

_________________
Vebut.se
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
grejvonklas



Medlem i: 3772 dagar

Status: Offline



#730900
Inlägg Skrivet: 2013-04-03 13:29      Ämne: Citera

Går annars att göra såhär, denna använder sig utav ASCII-tabellen och klarar av det Pake frågar efter.

PHP:
1:
 function RandomString($len 10) {
2:
   $randstr '';
3:
   for ($i 0$i $len$i++) {
4:
      $str rand(48122);
5:
       while ($str >= 58 && $str <= 64 || $str >= 91 && $str <= 96) {
6:
         $str rand(48122);
7:
       }
8:
      $randstr .= chr($str);
9:
   }
10:
return $randstr;
11:
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Snorken



Medlem i: 2130 dagar

Status: Offline



#732250
Inlägg Skrivet: 2013-05-23 11:49      Ämne: Citera

Min variant, lade bokstäverna som optional argument om man nångång vill ändra dessa på ett bekvämt sätt:

KOD:
1:
    static public function generate_code($length = 4, $pool = '2347ABCDEFGHJKLMNPQRTUVWXYZ') // captcha-friendly pool as default
2:
    {
3:
        $str = '';
4:
        for ($i = 0; $i < $length; $i++)
5:
        {
6:
            $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
7:
        }
8:
        return $str;
9:
    }
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Tips och Trix
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic