From: Kirrily R. <sk...@us...> - 2001-03-06 18:22:16
|
Update of /cvsroot/formmagick/formmagick/lib/CGI/FormMagick In directory usw-pr-cvs1:/tmp/cvs-serv8129 Modified Files: Validator.pm Log Message: Added validation routines for password, credit_card_number and credit_card_expiry. Removed the reliance on Business::CreditCard. It didn't offer us anywhere near as much as we wanted, and the one routine it did give us (checking the validity of a credit card number via the checksum algorithm) is a standard algorithm that won't change or anything, so I just cut-and-pasted it wholesale. I removed the credit_card_type validation routine, as it doesn't seem like it'll be all that useful. Index: Validator.pm =================================================================== RCS file: /cvsroot/formmagick/formmagick/lib/CGI/FormMagick/Validator.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** Validator.pm 2001/03/02 14:24:46 1.3 --- Validator.pm 2001/03/06 18:23:52 1.4 *************** *** 264,269 **** sub password { ! my $data = $_[0]; ! return "XXX NOT YET IMPLEMENTED"; } --- 264,273 ---- sub password { ! $_ = $_[0]; # easier to match on $_ ! if (/\d/ and /[A-Z]/ and /[a-z]/ and /\W/ and length($_) > 6) { ! return "OK"; ! } else { ! return "Not a good password. Should have a mixture of upper and lower case letters, numbers, and non-alphanumeric characters."; ! } } *************** *** 356,386 **** =pod - =item credit_card_type - - The data looks like a valid type of credit card (eg Visa, Mastercard). - Requires Business::CreditCard to be installed. - - =cut - - sub credit_card_type { - my $data = $_[0]; - require Business::CreditCard; - return "XXX NOT YET IMPLEMENTED"; - } - - =pod - =item credit_card_number ! The data looks like a valid credit card number. ! Requires Business::CreditCard to be installed. =cut sub credit_card_number { ! my $data = $_[0]; ! require Business::CreditCard; ! return "XXX NOT YET IMPLEMENTED"; } --- 360,391 ---- =pod =item credit_card_number ! The data looks like a valid credit card number. Checks the input ! for numeric characters only, length, and runs it through the checksumming ! algorithm used by most (all?) credit cards. =cut sub credit_card_number { ! my $data = $_[0]; ! my ($i, $sum, $weight); ! ! return "Credit card numbers may only contain numeric characters" ! if $number =~ /[^\d\s]/; ! ! $number =~ s/\D//g; ! ! return "Must be at least 14 characters in length" ! unless length($number) >= 13 && 0+$number; ! ! for ($i = 0; $i < length($number) - 1; $i++) { ! $weight = substr($number, -1 * ($i + 2), 1) * (2 - ($i % 2)); ! $sum += (($weight < 10) ? $weight : ($weight - 9)); ! } ! return "OK" if substr($number, -1) == (10 - $sum % 10) % 10; ! return "Doesn't appear to be a valid credit card number"; ! } *************** *** 389,402 **** =item credit_card_expiry ! The data looks like a valid credit card expiry date. ! Requires Business::CreditCard to be installed. =cut sub credit_card_expiry { my $data = $_[0]; ! require Business::CreditCard; ! return "XXX NOT YET IMPLEMENTED"; } --- 394,426 ---- =item credit_card_expiry ! The data looks like a valid credit card expiry date. Checks MM/YY and ! MM/YYYY format dates and fails if the date is in the past or is more than ! ten years in the future. =cut + # + # this validation routine was snarfed whole from Business::CreditCard + # + sub credit_card_expiry { my $data = $_[0]; ! my ($m, $y) = split("\D", $data); # split on first non-numeric char ! return "Expiry date must be in the format MM/YY or MM/YYYY" ! if ($y =~ /\D/ or $m =~ /\D/); ! ! my ($thism, $thisy) = localtime()[4,5] ! $y += (substr($thisy, 0, 2) * 100) if $y =~ /\d{2}/; ! ! if ($y < $thisy) { ! return "This expiry date appears to have already passed"; ! i } elsif ($m < $thism) { ! return "This expiry date appears to have already passed"; ! } elsif ($y > ($thisy + 10)) { ! return "This expiry date is too far in the future"; ! } else { ! return "OK"; ! } } |