Provided by: libalgorithm-checkdigits-perl_1.3.6-2_all bug

NAME

       Algorithm::CheckDigits - 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();
         %md = Algorithm::CheckDigits->method_descriptions();

         $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).

SUBROUTINES/METHODS

   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::plug_in($module, $description, $prefkey)
       Register a module that provides the same four methods as above. This function returns a handle with which
       the registered module can be instantiated.

       The  first  argument $module is the module to be used for this plugin. This argument is mandatory. Do not
       register 'Algorithm::CheckDigits'.

       The second argument is a short description of the algorithm. If it is omitted, the string  "algorithm  of
       module $module" will be taken.

       The  third  argument is the preferred key for this algorithm. The "plug_in()" function does not guarantee
       to register the algorithm with this key. Instead  it  returns  the  key  under  which  the  algorithm  is
       registered.

       See "REGISTERING PLUGINS" for more information on registering plugins.

   Algorithm::CheckDigits::method_list()
       Returns a list of known methods for check digit computation.

   Algorithm::CheckDigits::method_descriptions()
       Returns  a  hash of descriptions for the known methods for check digit computations. The keys of the hash
       are the values returned by "method_list()".

   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

   CHECK SUM METHODS
       At  the  moment these methods to compute check digits are provided: (vatrn - VAT Return Number, in german
       ustid UmsatzSTeuer-ID)

       euronote
           European bank notes, see Algorithm::CheckDigits::M09_001.

       amex, bahncard, diners, discover, enroute, eurocard, happydigits, isin, jcb, klubkarstadt, mastercard,
       miles&more, visa, imei, imeisv
           See Algorithm::CheckDigits::M10_001.

       siren, siret
           See Algorithm::CheckDigits::M10_002.

       ismn
           See Algorithm::CheckDigits::M10_003.

       ean, iln, isbn13, nve, 2aus5
           See Algorithm::CheckDigits::M10_004.

       identcode_dp, leitcode_dp
           See Algorithm::CheckDigits::M10_005.

       rentenversicherung
           See Algorithm::CheckDigits::M10_006.

       sedol
           See Algorithm::CheckDigits::M10_008.

       betriebsnummer
           See Algorithm::CheckDigits::M10_009.

       postscheckkonti
           See Algorithm::CheckDigits::M10_010.

       ups See Algorithm::CheckDigits::M10_011.

       hkid, isbn, issn, nhs_gb, ustid_pt, vat_sl, wagonnr_br
           See Algorithm::CheckDigits::M11_001.

       pzn See Algorithm::CheckDigits::M11_002.

       pkz See Algorithm::CheckDigits::M11_003.

       cpf, titulo_eleitor
           See Algorithm::CheckDigits::M11_004.

       ccc_es
           See Algorithm::CheckDigits::M11_006.

       ustid_fi, vatrn_fi
           See Algorithm::CheckDigits::M11_007.

       ustid_dk, vatrn_dk
           See Algorithm::CheckDigits::M11_008.

       nric_sg
           See Algorithm::CheckDigits::M11_009.

       ahv_ch
           See Algorithm::CheckDigits::M11_010.

       ustid_nl, vatrn_nl
           See Algorithm::CheckDigits::M11_011.

       bwpk_de
           See Algorithm::CheckDigits::M11_012.

       ustid_gr, vatrn_gr
           See Algorithm::CheckDigits::M11_013.

       esr5_ch
           See Algorithm::CheckDigits::M11_015.

       ustid_pl, vatrn_pl
           See Algorithm::CheckDigits::M11_016.

       ecno, ec-no, einecs, elincs
           See Algorithm::CheckDigits::M11_017.

       isan
           See Algorithm::CheckDigits::M16_001.

       dni_es
           See Algorithm::CheckDigits::M23_001.

       ustid_ie, vatrn_ie
           See Algorithm::CheckDigits::M23_002.

       code_39
           See Algorithm::CheckDigits::M43_001.

       ustid_lu, vatrn_lu
           See Algorithm::CheckDigits::M89_001.

       ustid_be, vatrn_be
           See Algorithm::CheckDigits::M97_001.

       iban
           See Algorithm::CheckDigits::M97_002.

       upc See Algorithm::CheckDigits::MBase_001.

       blutbeutel, bzue_de, ustid_de, vatrn_de
           See Algorithm::CheckDigits::MBase_002.

       sici
           See Algorithm::CheckDigits::MBase_003.

       pa_de
           See Algorithm::CheckDigits::MXX_001.

       cas See Algorithm::CheckDigits::MXX_002.

       dem Old german bank notes (DEM), see Algorithm::CheckDigits::MXX_003.

       ustid_at, vatrn_at
           See Algorithm::CheckDigits::MXX_004.

       esr9_ch
           See Algorithm::CheckDigits::MXX_005.

       verhoeff
           Verhoeff scheme, see Algorithm::CheckDigits::MXX_006 or Algorithm::Verhoeff

   EXPORT
       This module exports the Function "CheckDigits()" that is used to create an instance of a checker with the
       given algorithm.

REGISTERING PLUGINS

       Brian T. Wightman was the first, asking me to add a plugin registry to Algorithm::CheckDigits  and  so  I
       added  the function "plug_in()" that does just this, registering plug in modules to be used just like the
       modules in the distribution of this module.

       Providing some means to add additional algorithms without the need to change the module has  the  benefit
       that  the  user  of  those additional algorithms may easily use them with the same interface as the other
       algorithms without having to wait for a new version, that may or may not include the wanted algorithm.

       But there is a problem: the user must be able to select the new algorithms like he  did  with  the  other
       ones. And the catch is: since these new algorithms are developed independently there is no guarantee that
       no more than one module applies for the same handle. I could have implemented some simple strategies like
       last one wins (the module that registers last for a given handle is the one that is choosen) or first one
       wins  (the  first registered module is choosen). Instead I went for something more complex to assure that
       every module that wants to get registered will be registered and that every  registered  module  will  be
       accessible  by  the same handle as long as the program runs. To make this work "plug_in()" sees the third
       argument only as a hint how the handle should look like, when a module is registered. It returns the real
       handle with which the algorithm can be instantiated. That means a developer of  a  plugin  module  cannot
       make  the  handle  immediately  available  like  I did for the modules in the distribution. Instead there
       should be something like a public variable or function that returns the handle as it came back  from  the
       "plug_in()" function.

       This could go like this in the module:

        package Algorithm::XyZ;

        use Algorithm::CheckDigits;

        our $xyz = Algorithm::CheckDigits::plug_in('Algorithm::XyZ',
                                                   'XyZ check digits',
                                                   'xyz');

       And the user of this algorithm would write something like this:

        use Algorithm::CheckDigits;
        use Algorithm::XyZ;

        my $cd = CheckDigits($Algorithm::XyZ::xyz);

        if ($cd->is_valid($some_number)) {
            # do something
        }

       Please  have  a look at the plugin tests in the test directory (t/plugin*.t) and the accompanying modules
       (t/PluginLib*.pm) for example usage. You may also try to load an additional module with  the  scripts  in
       bin and cgi-bin and look for the additional algorithms in the output:

        perl -Ilib -It -MPluginLibA bin/checkdigits.pl list

        perl -Ilib -It -MPluginLibA cgi-bin/checkdigits.cgi

   Namespace
       I would like to ask you to use any namespace below or outside but not direct Algorithm::CheckDigits. That
       means     for     instance     for     the    XyZ    algorithm,    Algorithm::XyZ    would    be    fine,
       Algorithm::CheckDigits::Plugin::XyZ  or   Algorithm::CheckDigits::X::XyZ   would   be   fine   too.   But
       Algorithm::CheckDigits::XyZ  could  collide  with  some  future  version  of  the  Algorithm::CheckDigits
       distribution, so please avoid this namespace.

SEE ALSO

       perl, www.pruefziffernberechnung.de.

BUGS AND LIMITATIONS

       The function "plug_in()" dies if you try to register the module 'Algorithm::CheckDigits'.

       Please report any bugs or feature requests to "bug-algorithm-checkdigits@rt.cpan.org", or through the web
       interface at <http://rt.cpan.org>.

AUTHOR

       Mathias Weidner, "mamawe@cpan.org"

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.

       Brian T. Wightman made me think about and implement the plugin interface.

COPYRIGHT AND LICENSE

       Copyright 2004-2020 by Mathias Weidner

       This library is free software; you can redistribute it and/or modify it under  the  same  terms  as  Perl
       itself. See perlartistic.

perl v5.36.0                                       2022-10-13                        Algorithm::CheckDigits(3pm)