]>
git.p6c8.net - selfforum.git/blob - selfforum-cgi/shared/Id.pm
3 ################################################################################
7 # Authors: André Malo <nd@o3media.de>, 2001-05-03 #
9 # Description: compose an unique ID (in CGI context) #
11 ################################################################################
20 ################################################################################
24 $VERSION = do { my @r =(q
$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x
$#r, @r };
26 ################################################################################
30 use base
qw(Exporter);
36 ### sub unique_id () ###########################################################
38 # compose an unique ID
42 # Return: Scalar: unique ID
47 my $ip=$ENV{REMOTE_ADDR
};
49 my $port=$ENV{REMOTE_PORT
};
50 my $rand=int(rand(time));
52 # works only with IPv4! (will be changed later...)
54 $ip = hex(join ('',map {sprintf ('%02X',$_)} split (/\./,$ip)));
56 join '' => map {to_base64
($_)} ($time, $port, $ip, $rand, $$);
59 ### sub to_base64 ($) ##########################################################
61 # only converts (max.) 32-bit numbers into a system with base 64
63 # Params: $x - number to convert
65 # Return: converted number ;-)
69 return '' unless defined $x;
71 my $y = $table[$x % 64];
73 $y = $table[$x % 64].$y while ($x = int ($x/64));
79 # 64 'digits' (for our base 64 system)
81 @table = ('a'..'z','-','0'..'9','A'..'Z','_');
85 *may_id
= eval join quotemeta join ('' => @table) => (
86 q
[sub {local $_=shift; defined and length and not y
/],
91 # keep 'require' happy
96 ### end of Id ##################################################################
patrick-canterino.de