]>
git.p6c8.net - selfforum.git/blob - selfforum-cgi/shared/Id.pm
3 ################################################################################
7 # Authors: André Malo <nd@o3media.de> #
9 # Description: compose an unique ID (in CGI context) #
11 ################################################################################
19 ################################################################################
27 sub VERSION
{(q
$Revision$ =~ /([\d.]+)\s*$/)[0] or '0.0'}
29 ################################################################################
33 use base
qw(Exporter);
39 ### sub unique_id () ###########################################################
41 # compose an unique ID
45 # Return: Scalar: unique ID
50 my $ip=$ENV{REMOTE_ADDR
};
52 my $port=$ENV{REMOTE_PORT
};
53 my $rand=int(rand(time));
55 # works only with IPv4! (will be changed later...)
57 $ip = hex(join ('',map {sprintf ('%02X',$_)} split (/\./,$ip)));
59 join '' => map {to_base64
($_)} ($time, $port, $ip, $rand, $$);
62 ### sub to_base64 ($) ##########################################################
64 # only converts (max.) 32-bit numbers into a system with base 64
66 # Params: $x - number to convert
68 # Return: converted number ;-)
72 return '' unless defined $x;
74 my $y = $table[$x % 64];
76 $y = $table[$x % 64].$y while ($x = int ($x/64));
82 # 64 'digits' (for our base 64 system)
84 @table = ('a'..'z','-','0'..'9','A'..'Z','_');
88 *may_id
= eval join quotemeta join ('' => @table) => (
89 q
[sub {local $_=shift; defined and length and not y
/],
94 # keep 'require' happy
99 ### end of Id ##################################################################
patrick-canterino.de