| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Data::Uniqid; |
|
2
|
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
19866
|
use 5.006; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
41
|
|
|
4
|
1
|
|
|
1
|
|
6
|
use strict; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
237
|
|
|
5
|
1
|
|
|
1
|
|
7
|
use warnings; |
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
57
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
require Exporter; |
|
8
|
1
|
|
|
1
|
|
1063
|
use AutoLoader qw(AUTOLOAD); |
|
|
1
|
|
|
|
|
2027
|
|
|
|
1
|
|
|
|
|
7
|
|
|
9
|
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
our @ISA = qw(Exporter); |
|
11
|
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
our %EXPORT_TAGS = ( 'all' => [ qw( |
|
13
|
|
|
|
|
|
|
suniqid |
|
14
|
|
|
|
|
|
|
uniqid |
|
15
|
|
|
|
|
|
|
luniqid |
|
16
|
|
|
|
|
|
|
) ] ); |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
our @EXPORT = qw( |
|
21
|
|
|
|
|
|
|
|
|
22
|
|
|
|
|
|
|
); |
|
23
|
|
|
|
|
|
|
our $VERSION = '0.12'; |
|
24
|
|
|
|
|
|
|
|
|
25
|
1
|
|
|
1
|
|
29979
|
use Math::BigInt; |
|
|
1
|
|
|
|
|
53926
|
|
|
|
1
|
|
|
|
|
7
|
|
|
26
|
1
|
|
|
1
|
|
26709
|
use Sys::Hostname; |
|
|
1
|
|
|
|
|
1567
|
|
|
|
1
|
|
|
|
|
74
|
|
|
27
|
1
|
|
|
1
|
|
1032
|
use Time::HiRes qw( gettimeofday usleep ); |
|
|
1
|
|
|
|
|
2168
|
|
|
|
1
|
|
|
|
|
8
|
|
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
sub base62() { ################################################### Base62 ##### |
|
30
|
306
|
|
|
306
|
0
|
523
|
my($s)=@_; |
|
31
|
306
|
|
|
|
|
4673
|
my(@c)=('0'..'9','a'..'z','A'..'Z'); |
|
32
|
306
|
|
|
|
|
440
|
my(@p,$u,$v,$i,$n); |
|
33
|
306
|
|
|
|
|
459
|
my($m)=20; |
|
34
|
306
|
|
|
|
|
536
|
$p[0]=1; |
|
35
|
306
|
|
|
|
|
673
|
for $i (1..$m) { |
|
36
|
6120
|
|
|
|
|
673016
|
$p[$i]=Math::BigInt->new($p[$i-1]); |
|
37
|
6120
|
|
|
|
|
141448
|
$p[$i]=$p[$i]->bmul(62); |
|
38
|
|
|
|
|
|
|
} |
|
39
|
|
|
|
|
|
|
|
|
40
|
306
|
|
|
|
|
32781
|
$v=Math::BigInt->new($s); |
|
41
|
306
|
|
|
|
|
12899
|
for ($i=$m;$i>=0;$i--) { |
|
42
|
6426
|
|
|
|
|
113114
|
$v=Math::BigInt->new($v); |
|
43
|
6426
|
|
|
|
|
147905
|
($n,$v)=$v->bdiv($p[$i]); |
|
44
|
6426
|
|
|
|
|
953892
|
$u.=$c[$n]; |
|
45
|
|
|
|
|
|
|
} |
|
46
|
306
|
|
|
|
|
5537
|
$u=~s/^0+//; |
|
47
|
|
|
|
|
|
|
|
|
48
|
306
|
|
|
|
|
6399
|
return($u); |
|
49
|
|
|
|
|
|
|
} |
|
50
|
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
sub suniqid { ########################################### get unique id ##### |
|
52
|
102
|
|
|
102
|
0
|
1154
|
my($s,$us)=gettimeofday();usleep(1); |
|
|
102
|
|
|
|
|
61508
|
|
|
53
|
102
|
|
|
|
|
1250
|
my($v)=sprintf("%06d%05d%06d",$us,substr($s,-5),$$); |
|
54
|
102
|
|
|
|
|
360
|
return(&base62($v)); |
|
55
|
|
|
|
|
|
|
} |
|
56
|
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
sub uniqid { ########################################### get unique id ##### |
|
58
|
102
|
|
|
102
|
0
|
1252
|
my($s,$us)=gettimeofday();usleep(1); |
|
|
102
|
|
|
|
|
13415
|
|
|
59
|
102
|
|
|
|
|
833
|
my($v)=sprintf("%06d%010d%06d",$us,$s,$$); |
|
60
|
102
|
|
|
|
|
293
|
return(&base62($v)); |
|
61
|
|
|
|
|
|
|
} |
|
62
|
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
sub luniqid { ############################################ get unique id ##### |
|
64
|
102
|
|
|
102
|
0
|
1135
|
my($s,$us)=gettimeofday();usleep(1); |
|
|
102
|
|
|
|
|
11078
|
|
|
65
|
102
|
|
|
|
|
489
|
my($ia,$ib,$ic,$id)=unpack("C4", (gethostbyname(hostname()))[4]); |
|
66
|
102
|
|
|
|
|
13714
|
my($v)=sprintf("%06d%10d%06d%03d%03d%03d%03d",$us,$s,$$,$ia,$ib,$ic,$id); |
|
67
|
102
|
|
|
|
|
263
|
return(&base62($v)); |
|
68
|
|
|
|
|
|
|
} |
|
69
|
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
1; |
|
71
|
|
|
|
|
|
|
__END__ |
|
72
|
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
=head1 NAME |
|
74
|
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
Data::Uniqid - Perl extension for simple genrating of unique id's |
|
76
|
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
78
|
|
|
|
|
|
|
|
|
79
|
|
|
|
|
|
|
use Data::Uniqid qw ( suniqid uniqid luniqid ); |
|
80
|
|
|
|
|
|
|
|
|
81
|
|
|
|
|
|
|
$id = suniqid; |
|
82
|
|
|
|
|
|
|
$id = uniqid; |
|
83
|
|
|
|
|
|
|
$id = luniqid; |
|
84
|
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
86
|
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
Data::Uniqid provides three simple routines for generating unique ids. |
|
88
|
|
|
|
|
|
|
These ids are coded with a Base62 systen to make them short and handy |
|
89
|
|
|
|
|
|
|
(e.g. to use it as part of a URL). |
|
90
|
|
|
|
|
|
|
|
|
91
|
|
|
|
|
|
|
suinqid |
|
92
|
|
|
|
|
|
|
genrates a very short id valid only for the localhost and with a |
|
93
|
|
|
|
|
|
|
liftime of 1 day |
|
94
|
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
uniqid |
|
96
|
|
|
|
|
|
|
generates a short id valid on the local host |
|
97
|
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
luniqid |
|
99
|
|
|
|
|
|
|
generates a long id valid everywhere and ever |
|
100
|
|
|
|
|
|
|
|
|
101
|
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
=head1 AUTHOR |
|
103
|
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
Mike Wesemann, <mwx@gmx.de> |
|
105
|
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
107
|
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
L<perl>. |
|
109
|
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
=cut |