Advertisement
teuk

SIN.pl

Feb 3rd, 2017
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.07 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. # [06:37:08:teuk@ramses:~/src/perl] ./SIN.pl 046454286
  4. # 0 currentControl=0
  5. # 1 currentControl=8
  6. # 2 currentControl=6
  7. # 3 currentControl=8
  8. # 4 currentControl=5
  9. # 5 currentControl=8
  10. # 6 currentControl=2
  11. # 7 currentControl=16
  12. # 8 currentControl=6
  13. # checksum=50SIN 046454286 is valid, 50 is divisible by 10
  14.  
  15. my $SIN = $ARGV[0];
  16.  
  17. unless ( defined($SIN) && ($SIN =~ /[0-9]{9}/ )) {
  18.     print "SIN Invalid\n";
  19.     print "SIN.pl <SIN>\n";
  20.     exit 1;
  21. }
  22.  
  23. my @controls;
  24. for (my $i=0;$i<9;$i++) {
  25.     my $currentControl = substr($SIN,$i,1);
  26.     if ( $i % 2 ) {
  27.         $currentControl*=2;
  28.     }
  29.     print "$i currentControl=$currentControl\n";
  30.     if ($currentControl > 9) {
  31.         $currentControl = int(substr($currentControl,0,1)) + int(substr($currentControl,1,1));
  32.     }
  33.     push @controls,$currentControl;
  34. }
  35.  
  36. my $checksum = 0;
  37. for (my $i=0;$i<9;$i++) {
  38.     $checksum+=$controls[$i];
  39. }
  40.  
  41. print "checksum=$checksum";
  42. if ( $checksum % 10 ) {
  43.     print "SIN $SIN is invalid, $checksum is not divisible by 10\n";
  44. }
  45. else {
  46.     print "SIN $SIN is valid, $checksum is divisible by 10\n";
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement