Tach,
Thema 1 in Perl, eine Lösung, die selbst unter 500.000 Funktionsaufrufen keine Duplikate generiert:
Die kann allerdings sicher nicht die Anforderungen erfüllen; die Einschränkung zwei Großbuchstaben und zwei Ziffern erlaubt nichtmal 100000 verschiedene Kombinationen (84100 für 29 und 67600 für 26 Buchstaben).
Denkst wirklich, ich würde hier was posten, wenns nix taugt!?
Hier mein Test, test it:
#!/usr/bin/perl
###########################################################################
use strict;
use Digest::MD5 qw(md5_hex);
my %test;
for(1..500000){
my $i = makeSid();
$test{$i}++;
}
# Duplikate in %test finden
while( my ($k, $v) = each %test){
if($v > 1){ print "Key $k wurde mehrfach vegeben\n" }
}
exit; # EOS
###########################################################################
# otto macht haufenweise Duplikate
sub otto{
my $x = int(rand(30));
return $x;
}
###########################################################################
# makeSid macht keine Duplikate
sub makeSid{
# Erzeugt eine kryptographisch starke zufaellige Session ID.
# Zurueckgegeben werden Hexadezimal-Zeichen
my @chars = ('A' .. 'Z', 'a' .. 'z', 0 .. 9, '+', '-');
my $len = scalar @chars;
my $id .= time();
$id .= $$;
for(my $i = 0; $i < $len; $i++){
$id .= $chars[int(rand($len))];
}
$id = substr($id, 0, $len);
$id = md5_hex($id);
return $id;
}
Schönen Tach noch,
Hotte
--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.