webForumDet fria alternativet

Vill jämföra mina genererade koder

8 svar · 729 visningar · startad av Tulork

TulorkMedlem sedan aug. 2004903 inlägg
#1

har precis lekt ihop ett väldigt omständigt, men ack så roligt skript. Den genererar fram två unika nummerkombinationer.. jag vill nu testa om dessa två någonsin blir lika om man typ genererar fram dem 1000grr... tycker själv det hade varit kul att se :)

självklart så kommer den förr eller senare generera fram samma nummer, men vill testa lite så här ändå :)

så här ser koden ut

<?php 
function unik(){
session_start();
$_SESSION['id']=rand(100, 999);

$id = $_SESSION['id'];
//-----------------Steg 1--------------------
$unik_1 = rand(00001,99999);

$unik_2 = rand(01,99);

$unik_3 = rand(100,999);

$sum_1 = $unik_1 * $unik_2 - $unik_3;

//-----------------Steg 2--------------------
$sum_2 = rand(1010,9090);

$sum_3 = rand(10,99);

$total = $sum_1 - $sum_3 + $sum_2;

//-----------------Steg 3--------------------
$final_1 = rand(1111,9999);

$final_2 = rand(4312, 87878);

$final_3 = rand(10,99);

//Den slutgiltiga framgenererade koden
$GRAND = $total * $final_3 - $final_2 + $final_1 - $id;

$qq_1 = rand(100, 999);

$qq_2 = rand(10, 99);

$rr = rand($qq_1, $qq_2);

$koden = $qq_1 + $qq_2 -$rr;

$op_1 = rand($unik_2, $id);

$op_2 = rand(0001, 9191);

$fix = $op_1 + $op_2 * $qq_1 + $id * $sum_3;

$dump = rand(1000, 9999);

$fimp = $fix - $dump + $id;
echo $fimp;

}

function unik2(){
session_start();
$_SESSION['id']=rand(100, 999);

$id = $_SESSION['id'];
//-----------------Steg 1--------------------
$unik_1 = rand(00001,99999);

$unik_2 = rand(01,99);

$unik_3 = rand(100,999);

$sum_1 = $unik_1 * $unik_2 - $unik_3;

//-----------------Steg 2--------------------
$sum_2 = rand(1010,9090);

$sum_3 = rand(10,99);

$total = $sum_1 - $sum_3 + $sum_2;

//-----------------Steg 3--------------------
$final_1 = rand(1111,9999);

$final_2 = rand(4312, 87878);

$final_3 = rand(10,99);

//Den slutgiltiga framgenererade koden
$GRAND = $total * $final_3 - $final_2 + $final_1 - $id;

$qq_1 = rand(100, 999);

$qq_2 = rand(10, 99);

$rr = rand($qq_1, $qq_2);

$koden = $qq_1 + $qq_2 -$rr;

$op_1 = rand($unik_2, $id);

$op_2 = rand(0001, 9191);

$fix = $op_1 + $op_2 * $qq_1 + $id * $sum_3;

$dump = rand(1000, 9999);

$fixo = $fix - $dump + $id;
echo $fixo;

}
$set_1 = unik();
echo "<br />";
$set_2 = unik2();

?>

Som sagt, väldigt omständigt.. jag lyckas inte få igång en vettig loop som checkar de två framgenererade nummrena mot varandra, men det kanske ni kan hjälpa mig med.

EDIT* eller att man kör bara en av funktionerna 1000grr och checkar alla framgenererade värdena mot varandra..

itpastornMedlem sedan feb. 2007278 inlägg
#2

1. Vad gör din session i sammanhanget? Att lägga session_start() i en loop är inte att rekommendera...

2. Tills vidare bör du använda mt_rand(). I PHP 5.3 kommer rand vara identisk med mt_rand() "under skalet". (Mitt förslag till php-internals, fixat av en kille som heter David Coalier)

3. Dina funktioner skriver ut, men returnerar inget.

4. Vad gör all matematik på vägen till ditt svar som skrivs ut?

TulorkMedlem sedan aug. 2004903 inlägg
#3

som sagt... mkt omständig och inte speciellt nödvändig kod. Sessionen används inte.. den råkade följa med i denna koden ser jag.. den fyller ingen nytta.

Denna ska inte användas till någonting, jag vill bara se hur många gånger den genererar fram samma kod i en loop om 1000ggr.. det behöver inte ligga i en funktion överhuvudtaget, och absolut inte två stycken.

Jag ber också att inte bli ifrågasatt på de olika metoderna jag använder mig av i detta lilla skript... den ser inte ljuset ändå.. bara lite tidsfördriv för mig.

stevenetMedlem sedan juni 20001 251 inlägg
#4

Är det något åt det här hållet du är ute efter? Skapar 1000 par och jämför dessa. Skriver sedan ut om eventuella dubletter har gjorts. Förutsatt att du fixat sessionfelet samt ersätter echo $fixo; med return $fixo;

<?php
$x = 0;
for($i=0;$i<1000;$i++) {
 if(unik()==unik2()) $x++;
}

echo $x." dublett(er).";
?>
spangoMedlem sedan juni 20008 205 inlägg
#5

stevenet skrev:

Är det något åt det här hållet du är ute efter? Skapar 1000 par och jämför dessa. Skriver sedan ut om eventuella dubletter har gjorts. Förutsatt att du fixat sessionfelet samt ersätter echo $fixo; med return $fixo;

<?php
$x = 0;
for($i=0;$i<1000;$i++) {
 if(unik()==unik2()) $x++;
}

echo $x." dublett(er).";
?>

Fast den där kollar ju bara antalet dubletter som genereras samtidigt. Vill man kolla hur många dubletter som genereras totalt får man ha nåt i stil med:

$dups = 0;
$ids = array();
for($i = 0; $i < 1000; ++$i) {
    $u = unik();
    if (isset($ids[$u])) ++$dups; // finns redan, räkna upp antal dubletter
    else $ids[$u] = 1;  // unik, lägg in i listan över unika id:n
}
echo $dups, " dubletter.";
TulorkMedlem sedan aug. 2004903 inlägg
#6

underbart, det funkar

resultat

100 000 framgenererade koder
22st dubletter

TulorkMedlem sedan aug. 2004903 inlägg
#7

Fixade en bättre efter att ha kollat runt lite.

<?php
    function randi($length = 8)
    {
        $chars = 'abcdefhiknrstyz23456789';
        $numChars = strlen($chars);
 
        $kod = '';
        for ($i = 0; $i < $length; $i++) {
            $kod .= substr($chars, mt_rand(1, $numChars) - 1, 1);
        }
        return $kod;
    }

$dups = 0; 
$ids = array(); 

for($i = 0; $i < 10000; ++$i) { 
$ior = rand(9,12);
    $u = randi($ior); 
	echo $u;
	echo "<br />";
    if (isset($ids[$u])) ++$dups; // finns redan, räkna upp antal dubletter 
    else $ids[$u] = 1;  // unik, lägg in i listan över unika id:n 
} 
echo $dups, " dubletter."; 
?>

0 dubletter

itpastornMedlem sedan feb. 2007278 inlägg
#8

Tulork skrev:

Jag ber också att inte bli ifrågasatt på de olika metoderna jag använder mig av i detta lilla skript... den ser inte ljuset ändå.. bara lite tidsfördriv för mig.

Tja, jag kan nog låta som en besserwisser ibland. :( Jag tänkte mest att passa på och skicka med lite tips - också är jag ju lite stolt att ett av mina förslag på phpinternals verkställts!

Du kan ju testa om det blir någon skillnad mellan rand() och mt_rand() - än så länge borde det bli det.

TulorkMedlem sedan aug. 2004903 inlägg
#9

itpastorn skrev:

Tja, jag kan nog låta som en besserwisser ibland. :( Jag tänkte mest att passa på och skicka med lite tips - också är jag ju lite stolt att ett av mina förslag på phpinternals verkställts!

Du kan ju testa om det blir någon skillnad mellan rand() och mt_rand() - än så länge borde det bli det.

Att du kan låta som en besserwisser bryr jag mig inte om sålänge det är goda råd du ger, villket du oftast gör ;)

mt_rand() och rand() har jag testat lite i ett par skript där jag genererar koder... rand() genererar fler dubletter när jag använder det, mt_rand() har inte på 1 000 000 genererade koder genererat fram dubletter.... nu är detta inte bara mt_rand() och rand(), blandar in lite annat också, men ändå.

141 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)