Skip to content

Commit 2923236

Browse files
committed
Ensure serial is not 000
1 parent 16599dd commit 2923236

2 files changed

Lines changed: 5 additions & 4 deletions

File tree

lib/Personnummer.pm

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ sub format {
3232

3333
croak "cannot format invalid personal identity numbers" if not $self->valid();
3434

35-
my $year = $long_format ? $self->{date}->year : $self->{date}->year % 100;
36-
my $day = $self->{is_coordination_number} ? $self->{date}->day + 60 : $self->{date}->day;
35+
my $year = $long_format ? $self->{date}->year : $self->{date}->year % 100;
36+
my $day = $self->{is_coordination_number} ? $self->{date}->day + 60 : $self->{date}->day;
3737

3838
return
3939
sprintf( "%s%02d%02d-%03d%d", $year, $self->{date}->month, $day, $self->{serial}, $self->{control} );
@@ -62,7 +62,8 @@ sub valid {
6262
$self->{serial}
6363
);
6464

65-
return defined $self->{date} && _luhn( $pnr ) == ( $self->{control} // -1 );
65+
return
66+
defined $self->{date} && _luhn( $pnr ) == ( $self->{control} // -1 ) && ( $self->{serial} // -1 ) > 0;
6667
}
6768

6869
sub is_female {

t/10-validate.t

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ subtest 'Valid personal identity numbers' => sub {
2020
};
2121

2222
subtest 'Invalid personal identity numbers' => sub {
23-
my @cases = ( "201702291236", "6403273814", "510819-9167", "640327-381", "640327-3814", );
23+
my @cases = ( "201702291236", "6403273814", "510819-9167", "640327-381", "640327-3814", "20150916-0006" );
2424

2525
foreach my $tc ( @cases ) {
2626
my $pnr = Personnummer->new( $tc );

0 commit comments

Comments
 (0)