Revision: 11941
Updated Code
at May 6, 2009 03:13 by rogerk
Updated Code
#
# random_norwegian_ssn()
#
# Accepts one parameter, a date string in the format DDMMYY.
#
sub random_norwegian_ssn {
my $date = shift;
# Extract date, month, year
my $d1 = substr($date,0,1);
my $d2 = substr($date,1,1);
my $m1 = substr($date,2,1);
my $m2 = substr($date,3,1);
my $y1 = substr($date,4,1);
my $y2 = substr($date,5,1);
my ($i1, $i2, $i3);
my ($c1, $c2);
do {
# SSNs for dates between 1900-1999 use an entity number between 0-499
my $random_num = int(rand(499));
# Pad the entity number to 3 numbers
my $padded_num = sprintf("%03d", $random_num);
($i1, $i2, $i3) = split(//, $padded_num);
# Calculate the two control numbers
my $v1 = (3*$d1) + (7*$d2) + (6*$m1) + $m2 + (8*$y1) + (9*$y2) + (4*$i1) + (5*$i2) + (2*$i3);
$c1 = ($v1 % 11) == 0 ? 0 : 11-($v1 % 11);
my $v2 = (5*$d1) + (4*$d2) + (3*$m1) + (2*$m2) + (7*$y1) + (6*$y2) + (5*$i1) +(4*$i2) + (3*$i3) + (2*$c1);
$c2 = ($v2 % 11) == 0 ? 0 : 11-($v2 % 11);
} until ($c1 < 10 && $c2 < 10);
return "$d1$d2$m1$m2$y1$y2$i1$i2$i3$c1$c2";
}
Revision: 11940
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 24, 2009 14:12 by rogerk
Initial Code
#
# random_norwegian_ssn()
#
# Accepts a date parameter, in the format DDMMYY.
#
sub random_norwegian_ssn {
my $date = shift;
# Extract date, month, year
my $d1 = substr($date,0,1);
my $d2 = substr($date,1,1);
my $m1 = substr($date,2,1);
my $m2 = substr($date,3,1);
my $y1 = substr($date,4,1);
my $y2 = substr($date,5,1);
my ($i1, $i2, $i3);
my ($c1, $c2);
do {
# SSNs for dates between 1900-1999 use an entity number between 0-499
my $random_num = int(rand(499));
# Pad the entity number to 3 numbers
my $padded_num = sprintf("%03d", $random_num);
($i1, $i2, $i3) = split(//, $padded_num);
# Calculate the two control numbers
my $v1 = (3*$d1) + (7*$d2) + (6*$m1) + $m2 + (8*$y1) + (9*$y2) + (4*$i1) + (5*$i2) + (2*$i3);
$c1 = ($v1 % 11) == 0 ? 0 : 11-($v1 % 11);
my $v2 = (5*$d1) + (4*$d2) + (3*$m1) + (2*$m2) + (7*$y1) + (6*$y2) + (5*$i1) +(4*$i2) + (3*$i3) + (2*$c1);
$c2 = ($v2 % 11) == 0 ? 0 : 11-($v2 % 11);
} until ($c1 < 10 && $c2 < 10);
return "$d1$d2$m1$m2$y1$y2$i1$i2$i3$c1$c2";
}
Initial URL
Initial Description
Generates a random valid norwegian SSN for dates between 1900 and 1999
Initial Title
Generate random valid norwegian SSN
Initial Tags
Initial Language
Perl