aboutsummaryrefslogtreecommitdiff
path: root/challenge-036
diff options
context:
space:
mode:
authorSimon Proctor <simon.proctor@zpg.co.uk>2019-11-26 09:53:07 +0000
committerSimon Proctor <simon.proctor@zpg.co.uk>2019-11-26 09:53:07 +0000
commitc17278b3f7ea185f76bd602895199bb3f188d28a (patch)
tree0fc4bc786f30da23fe7e83e3f6e07a057c6b67b5 /challenge-036
parentc21fd3bb05eba7ed28c29f9ea9b5b2a195b4db93 (diff)
downloadperlweeklychallenge-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.p617
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";
+}