Algorithm::CheckDigits(3) Perl extension to generate and test check digits

## SYNOPSIS

perl -MAlgorithm::CheckDigits -e Algorithm::CheckDigits::print_methods

or

```  use Algorithm::CheckDigits;

@ml = Algorithm::CheckDigits->method_list();
\$isbn = CheckDigits('ISBN');
if (\$isbn->is_valid('3-930673-48-7')) {
# do something
}
\$cn = \$isbn->complete('3-930673-48');     # \$cn = '3-930673-48-7'
\$cd = \$isbn->checkdigit('3-930673-48-7'); # \$cd = '7'
\$bn = \$isbn->basenumber('3-930673-48-7'); # \$bn = '3-930673-48'
```

## ABSTRACT

This module provides a number of methods to test and generate check digits. For more information have a look at the web site www.pruefziffernberechnung.de (german).

## CheckDigits(\$method)

Returns an object of an appropriate Algorithm::CheckDigits class for the given algorithm.

Dies with an error message if called with an unknown algorithm.

See below for the available algorithms. Every object understands the following methods:

is_valid(\$number)
Returns true or false if \$number contains/contains no valid check digit.
complete(\$number)
Returns a string representation of \$number completed with the appropriate check digit.
checkdigit(\$number)
Extracts the check digit from \$number if \$number contains a valid check digit.
basenumber(\$number)
Extracts the basenumber from \$number if \$number contains a valid check digit.

## Algorithm::CheckDigits::method_list()

Returns a list of known methods for check digit computation.

## Algorithm::CheckDigits::print_methods()

Returns a list of known methods for check digit computation.

You may use the following to find out which methods your version of Algorithm::CheckDigits provides and where to look for further information.

``` perl -MAlgorithm::CheckDigits -e Algorithm::CheckDigits::print_methods
```

## CHECKSUMMETHODS

At the moment these methods to compute check digits are provided: (vatrn - VAT Return Number, in german ustid UmsatzSTeuer-ID)
m07-001
See Algorithm::CheckDigits::M07_001.
euronote, m09-001
European bank notes, see Algorithm::CheckDigits::M09_001.
amex, bahncard, diners, discover, enroute, eurocard, happydigits, isin, jcb, klubkarstadt, mastercard, miles&more, visa, m09-001, imei, imeisv
See Algorithm::CheckDigits::M10_001.
siren, siret, m10-002
See Algorithm::CheckDigits::M10_002.
ismn, m10-003
See Algorithm::CheckDigits::M10_003.
ean, iln, isbn13, nve, 2aus5, m10-004
See Algorithm::CheckDigits::M10_004.
identcode_dp, leitcode_dp, m10-005
See Algorithm::CheckDigits::M10_005.
rentenversicherung, m10-006
See Algorithm::CheckDigits::M10_006.
sedol, m10-008
See Algorithm::CheckDigits::M10_008.
betriebsnummer, m10-009
See Algorithm::CheckDigits::M10_009.
postscheckkonti, m10-010
See Algorithm::CheckDigits::M10_010.
ups, m10-011
See Algorithm::CheckDigits::M10_011.
hkid, isbn, issn, nhs_gb, ustid_pt, vat_sl, wagonnr_br, m11-001
See Algorithm::CheckDigits::M11_001.
pzn, m11-002
See Algorithm::CheckDigits::M11_002.
pkz, m11-003
See Algorithm::CheckDigits::M11_003.
cpf, titulo_eleitor, m11-004
See Algorithm::CheckDigits::M11_004.
ccc_es, m11-006
See Algorithm::CheckDigits::M11_006.
ustid_fi, vatrn_fi, m11-007
See Algorithm::CheckDigits::M11_007.
ustid_dk, vatrn_dk, m11-008
See Algorithm::CheckDigits::M11_008.
nric_sg, m11-009
See Algorithm::CheckDigits::M11_009.
ahv_ch, m11-010
See Algorithm::CheckDigits::M11_010.
ustid_nl, vatrn_nl, m11-011
See Algorithm::CheckDigits::M11_011.
bwpk_de, m11-012
See Algorithm::CheckDigits::M11_012.
ustid_gr, vatrn_gr, m11-013
See Algorithm::CheckDigits::M11_013.
esr5_ch, m11-015
See Algorithm::CheckDigits::M11_015.
ustid_pl, vatrn_pl, m11-016
See Algorithm::CheckDigits::M11_016.
ecno, ec-no, einecs, elincs, m11-017
See Algorithm::CheckDigits::M11_017.
isan, m16-001
See Algorithm::CheckDigits::M16_001.
dni_es, m23-001
See Algorithm::CheckDigits::M23_001.
ustid_ie, vatrn_ie, m23-002
See Algorithm::CheckDigits::M23_002.
code_39, m43-001
See Algorithm::CheckDigits::M43_001.
ustid_lu, vatrn_lu, m89-001
See Algorithm::CheckDigits::M89_001.
ustid_be, vatrn_be, m97-001
See Algorithm::CheckDigits::M97_001.
iban, m97-002
See Algorithm::CheckDigits::M97_002.
upc, mbase-001
See Algorithm::CheckDigits::MBase_001.
blutbeutel, bzue_de, ustid_de, vatrn_de, mbase-002
See Algorithm::CheckDigits::MBase_002.
sici, mbase-003
See Algorithm::CheckDigits::MBase_003.
pa_de, mxx-001
See Algorithm::CheckDigits::MXX_001.
cas, mxx-002
See Algorithm::CheckDigits::MXX_002.
dem, mxx-003
Old german bank notes (DEM), see Algorithm::CheckDigits::MXX_003.
ustid_at, vatrn_at, mxx-004
See Algorithm::CheckDigits::MXX_004.
esr9_ch, mxx-005
See Algorithm::CheckDigits::MXX_005.
verhoeff, mxx-006
Verhoeff scheme, see Algorithm::CheckDigits::MXX_006 or Algorithm::Verhoeff

None by default.

## AUTHOR

Mathias Weidner, <[email protected]>

## THANKS

Petri Oksanen made me aware that CheckDigits('IMEI') would invoke no test at all since there was no entry for this in the methods hash.