The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    Business::DK::FI - validation of Danish FI numbers

VERSION
    The documentation describes version 0.02

SYNOPSIS
        use Business::DK::FI qw(validate validateFI generate);
    
        if (validate('026840149965328')) {
            print "026840149965328 is valid\n";
        }
    
    
        my $fi_number = generate(1);
    
        if ($fi_number eq '000000000000018') {
            print "we have a FI number\n";
        }

DESCRIPTION
    FI numbers are numbers used on GIRO payment forms. These can be used to
    do online payments in banks or at in physical banks or post offices.

    The module currently only supports FI numbers in the following series:

    *   71

    *   75

SUBROUTINES AND METHODS
  validate
    Takes a single argument. 15 digit FI number. Returns true (1) or false
    (0) indicating whether the provided parameter adheres to specification.

  validateFI
    Less intrusive exported variation of "validate". It is actually
    "validate" which is wrapping "validateFI".

  generate
    Simple FI generation method. Takes an arbitrary number adhering to the
    following requirements:

    *   length between 1 and 14

    *   value between 1 and 99999999999999

    Returns a valid FI number.

  PRIVATE SUBROUTINES AND METHODS
  _calculate_checksum
    This method calculates a checksum, it takes a single number as parameter
    and returns the calculated checksum.

  _calculate_sum
    This method calculates a sum it takes a number and a reference to an
    array of control cifers. It calculates a single sum based on the number
    and the control cifer and returns this.

DIAGNOSTICS
    All methods die if their API is not respected. Method calls can with
    success be wrapped in Try::Tiny or "eval" blocks.

CONFIGURATION AND ENVIRONMENT
    The module requires no special configuration or environment.

DEPENDENCIES
    *   Params::Validate

    *   Readonly

    *   Exporter

    *   English

BUGS AND LIMITATIONS
    This module has no known bugs or limitations.

BUG REPORTING
    Please report issues via CPAN RT:

    *   <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Business-DK-FI>

    or by sending mail to

    *   "<bug-Business-DK-FI@rt.cpan.org>"

TEST AND QUALITY
  TEST COVERAGE
        ---------------------------- ------ ------ ------ ------ ------ ------ ------
        File                           stmt   bran   cond    sub    pod   time  total
        ---------------------------- ------ ------ ------ ------ ------ ------ ------
        blib/lib/Business/DK/FI.pm    100.0  100.0    n/a  100.0  100.0   34.8  100.0
        ...b/Class/Business/DK/FI.pm   97.6   83.3    n/a  100.0  100.0   65.2   96.9
        Total                          99.1   90.0    n/a  100.0  100.0  100.0   98.7
        ---------------------------- ------ ------ ------ ------ ------ ------ ------

QUALITY AND CODING STANDARD
    The code passes Perl::Critic tests at severity 1 (*brutal*) with a set
    of policies disabled. please see t/perlcriticrc and the list below:

    *   Perl::Critic::Policy::ValuesAndExpressions::ProhibitConstantPragma,
        please see:
        <http://logiclab.jira.com/wiki/display/OPEN/Perl-Critic-Policy-Value
        sAndExpressions-ProhibitConstantPragma>

    *   Perl::Critic::Policy::Documentation::RequirePodLinksIncludeText,
        this is listed in the "TODO" it requires numerous changes to the
        distribution POD.

    *   Perl::Critic::Policy::NamingConventions::Capitalization,
        "validateFI" is exported both as "validateFI" and "validate" and FI
        is our used acronym so we try to stick to this

    *   Perl::Critic::Policy::ControlStructures::ProhibitCStyleForLoops,
        this is for the main algorithm, it was easier to do with a C-style
        for loop

    *   Perl::Critic::Policy::Subroutines::RequireArgUnpacking, this is due
        to the way: Params::Validate is used

    *   Perl::Critic::Policy::ValuesAndExpressions::ProhibitMagicNumbers, we
        use long control numbers

    *   Perl::Critic:.:Policy::Variables::ProhibitPunctuationVars

TODO
    Please see the distribution TODO file also and the distribution road map
    at:
    <http://logiclab.jira.com/browse/BDKFI#selectedTab=com.atlassian.jira.pl
    ugin.system.project%3Aroadmap-panel>

SEE ALSO
    *   http://www.pbs.dk/

    *   Try::Tiny

    *   Business::DK::CVR

    *   Business::DK::CPR

    *   Business::DK::PO

    *   Business::DK::Postalcode

    *   Business::DK::Phonenumber

AUTHOR
    Jonas B. Nielsen, (jonasbn) - "<jonasbn@cpan.org>"

COPYRIGHT
    Business-DK-FI and related is (C) by Jonas B. Nielsen, (jonasbn)
    2009-2011

LICENSE
    Business-DK-FI and related is released under the artistic license

    The distribution is licensed under the Artistic License, as specified by
    the Artistic file in the standard perl distribution
    (http://dev.perl.org/licenses/artistic.html).