sub par11 {
my $string = shift;
my $sum = 0;
for my $i (0 .. length ($string) - 1) {
my $c = substr ($string, $i, 1);
$sum += $c * (length ($string) - $i)
}!($sum % 11) }
It's not clear whether this is the right checksum.#
http://www.google.nl/search?q=cache:8m1zKNYrEO0J:www.enschede.nl/nieuw/projecten/aanbesteding/integratie/pve%2520Bijlage%25207.5.doc+Sofi+nummer+formaat&hl=en&start=56&lr=langen|langnl&ie=UTF-8
pattern name => [qw /SEN Netherlands SoFi/], create => sub {# 9 digits (d1 d2 d3 d4 d5 d6 d7 d8 d9)
# 9*d1 + 8*d2 + 7*d3 + 6*d4 + 5*d5 + 4*d6 + 3*d7 + 2*d8 +
1*d9# == 0 mod 11.
qr /([0-9]{9})(?(?{par11 ($^N)})|(?!))/;
} ;NAME
Regexp::Common::SEN - provide regexes for Social-Economical Numbers.
SYNOPSIS
use Regexp::Common qw /SEN/; while (<>) {/^$RE{SEN}{USA}{SSN}$/ and print "Social Security Number\n";
}DESCRIPTION
Please consult the manual of Regexp::Common for a general description of the works of this interface. Do not use this module directly, but load it via Regexp::Common.$$RREE{{SSEENN}}{{UUSSAA}}{{SSSSNN}}{{-sseepp}}
Returns a pattern that matches an American Social Security Number (SSN). SSNs consist of three groups of numbers, separated by a hypen("-"). This pattern only checks for a valid structure, that is, it
validates whether a number is valid SSN, was a valid SSN, or maybe a valid SSN in the future. There are almost a billion possible SSNs, and about 400 million are in use, or have been in use.If "-sep=P" is specified, the pattern P is used as the separator
between the groups of numbers.Under "-keep" (see Regexp::Common):
$1 captures the entire SSN.
$2 captures the first group of digits (the area number).
$3 captures the second group of digits (the group number).
$4 captures the third group of digits (the serial number).
HISTORY$Log: SEN.pm,v $
Revision 2.102 2005/01/02 01:17:48 abigail- Removed 'use Carp', as we aren't using it.
- Outcommented unused 'par11' function. Ought to be in support.pm anyway.
Revision 2.101 2004/06/09 21:52:14 abigail Force 2.101 version Revision 2.1 2004/06/09 21:50:14 abigail Initial checkinSEE ALSO
Regexp::Common for a general description of how to use this interface. AUTHORS Damian Conway and Abigail. MMAAIINNTTAAIINNAANNCCEEThis package is maintained by Abigail (regexp-common@abigail.nl).
BUGS AND IRRITATIONS
Bound to be plenty. For a start, there are many common regexes missing. Send them in toregexp-common@abigail.nl.
COPYRIGHTCopyright (c) 2001 - 2003, Damian Conway and Abigail.
All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html)perl v5.8.8 2005-01-01 Regexp::Common::SEN(3)