Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Generowanie nie losowych stringow
Jabol
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


Możecie bez strachu przejśc tutaj: http://forum.php.pl/viewtopic.php?p=31706#31706 ;P
[php:1:725d22549f]<?php

$hashes = array();

function get_string()
{
static $string, $depth, $init;
if( ! $init )
{
$init = true;
$string = array( chr( 1 ), chr( 1 ), chr( 1 ), chr( 1 ) );
$depth = 4;
}
else
{
if( ( $char = ++ord( $string[ $depth - 1 ] ) ) > 255 )
{
$string[ $depth - 1 ] = chr( 1 );
for( $i = $depth - 1; $i > 0; $i-- )
if( ++ord( $string[ $i - 1 ] ) > 255 )
{
$string[ $i - 1 ] = chr( 1 );
if( ( $i - 2 == 0 ) && ( ++ord( $string[ 0 ] ) > 255 ) )
{
$string[ ++$depth - 1 ] = chr( 1 );
break;
}
else
$string[ $i - 2 ] = chr( ord( $string[ $i ] ) ++ );
}
else
break;
}
else
$string[ $depth - 1 ] = chr( $char );
}
return implode( '', $string );
}

do
$hashes[ md5( ( $string = get_string() ) ) ] = $string;
while( sizeof( $hashes ) <= pow( 16, 32 ) );

$fd = fopen( 'hashtable', 'w' );
fputs( $fd, serialize( $hashes ) );
fclose( $fd );

?>[/php:1:725d22549f]niech ktoś to przetestuje, może najpierw tylko funkcje get_string(); pisalem bez testowania z glowy, wiec nie wiem czy dziala.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Jabol
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


hmmm
a przeanalizujmy kod (troche zmieniony ;P ):[php:1:21720c74fc]<?php

$hashes = array();

function get_string()
{
static $string, $depth, $init;
if( ! $init )//jezeli nie ma zapoczatkowanego to zrob to
{
$init = true;
$string = array( chr( 1 ), chr( 1 ), chr( 1 ), chr( 1 ) );//ustaw na 1,1,1,1 poniewaz ponizszy kod wymaga conajmniej 4 znakow
$depth = 4;
}
else//jezeli zapoczatkowane
{
if( ( $char = ( ord( $string[ $depth - 1 ] ) ) + 1 ) > 255 )//jezeli ostatni znak powiekszony o 1 przekracza pule ascii
{
$string[ $depth - 1 ] = chr( 1 );//zmien ostatni znak na pierwszy w ascii
for( $i = $depth - 1; $i > 0; $i-- )//dla kazdego znaku blizej poczatku sprawdz, czy nie przekracza ascii
if( ( ord( $string[ $i - 1 ] ) + 1 ) > 255 )//jezeli tak
{
$string[ $i - 1 ] = chr( 1 );//zmien ten znak na pierwszy w ascii
if( ( $i - 2 == 0 ) && ( ( ord( $string[ 0 ] ) + 1 ) > 255 ) )//jezeli znak przed nim jest pierwszym znakiem i przekracza pule
{
$string[ ++$depth - 1 ] = chr( 1 );//zwieksz dlugosc stringow
$string[ 0 ] = chr( 1 );//zmien pierwszy znak na ascii 1
break;//skoncz petla
}
else//jezeli nie
$string[ $i - 2 ] = chr( ( ord( $string[ $i ] ) + 1 ) );//zwieksz znak przed ostatnim znakiem, zeby po 1,1,1,255 dawalo 1,1,2,1 a nie 1,1,1,1
}
else//jezeli nie przekracza puli asci
{
$string[ $i ] = ord( $string[ $i - 1 ] ) + 1;//zwieksz go o 1
break;//i zakoncz petle
}
}
else//jezeli nie to
$string[ $depth - 1 ] = chr( $char );//zwieksz ten znak
}
return implode( '', $string );//wiadomo
}
//dalej wiadomo
do
{
$hashes[ md5( ( $string = get_string() ) ) ] = $string;
print $string. "n";//debbuging
}
while( sizeof( $hashes ) <= pow( 16, 32 ) );

$fd = fopen( 'hashtable', 'w' );
fputs( $fd, serialize( $hashes ) );
fclose( $fd );

?>[/php:1:21720c74fc]Może dojrzycie błąd?

ps. zastanawiam się, czy nie przenieść do php? conajmniej ostatnich paru postów

//edit, juz sie nie zastanawiam ;P
post nawiazuje dohttp://forum.php.pl/viewtopic.php?t=4985
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 02:01