diff options
| author | Simon Proctor <simon.proctor@zpg.co.uk> | 2019-11-26 09:53:07 +0000 |
|---|---|---|
| committer | Simon Proctor <simon.proctor@zpg.co.uk> | 2019-11-26 09:53:07 +0000 |
| commit | c17278b3f7ea185f76bd602895199bb3f188d28a (patch) | |
| tree | 0fc4bc786f30da23fe7e83e3f6e07a057c6b67b5 /challenge-036 | |
| parent | c21fd3bb05eba7ed28c29f9ea9b5b2a195b4db93 (diff) | |
| download | perlweeklychallenge-club-c17278b3f7ea185f76bd602895199bb3f188d28a.tar.gz perlweeklychallenge-club-c17278b3f7ea185f76bd602895199bb3f188d28a.tar.bz2 perlweeklychallenge-club-c17278b3f7ea185f76bd602895199bb3f188d28a.zip | |
Validating North American VIN's
Diffstat (limited to 'challenge-036')
| -rw-r--r-- | challenge-036/simon-proctor/perl6/ch-1.p6 | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/challenge-036/simon-proctor/perl6/ch-1.p6 b/challenge-036/simon-proctor/perl6/ch-1.p6 new file mode 100644 index 0000000000..621de5b72e --- /dev/null +++ b/challenge-036/simon-proctor/perl6/ch-1.p6 @@ -0,0 +1,17 @@ +#!/usr/bin/env perl6 + +subset ValidVinStr of Str + where m/^ <[A..Z 0..9] - [IOQ]> ** 9 <[A..Z 0..9] - [IOQUZ0]> <[A..Z 0..9] - [IOQ]> ** 7 $/; + +#| Validate a North American VIN +sub MAIN ( + ValidVinStr $vin #= VIN to check +) { + my %transliterator = ( ( "A".."Z" ) Z=> ( |(1..9),|(1..9),|(2..9) ) ); + + my @combed = $vin.comb(); + my $check = @combed[8]; + my $calc-check = ( [+] (@combed[|(0..7),|(9..16)].map( { %transliterator{$_} // $_ } )) Z* (|(8...2),|(10...2)) ) % 11; + $calc-check = "X" if $calc-check == 10; + say $calc-check ~~ $check ?? "Valid VIN $vin" !! "Invalid VIN $vin"; +} |
