The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Business::SWIFT;

use warnings;
use strict;

use Locales ;

=head1 NAME

Business::SWIFT - Validate SWIFT/BIC Bank identifiers.

=head1 VERSION

Version 0.01

=cut

our $VERSION = '0.02';

=head1 SYNOPSIS

This module implements the SWIFT BIC format validation.

It checks if the given SWIFT BIC code is well-formed according
to the ISO 9362 Specification. It does not check if the code is a
valid actual bank code.


    use Business::SWIFT;

    if ( Business::SWIFT->validateBIC('DEUTDEFF') ){
        .. do stuff ..
    }


Based on the following specification:
http://en.wikipedia.org/wiki/ISO_9362

=head1 FUNCTIONS

=head2 validateBIC

Returns a true value if the given BIC code is correct. False otherwise.

Code letters have to be uppercase.

This is a class method.


Usage example:
    
    if ( Business::SWIFT->validateBIC('DEUTDEFF') ){
       .. do stuff ..
    }
    

=cut

sub validateBIC{
    my ( $class , $candidate ) = @_ ;
    
    my $candLength = length($candidate) ;
    if( ( 8 != $candLength ) && ( 11 != $candLength ) ){
        return 0;
    }
    
    my ( $bankCode , $countryCode ,
         $locationCode , $branchCode ) = ( $candidate =~ /^([A-Z]{4})([A-Z]{2})([A-Z0-9]{2})([A-Z0-9]{3})?/  );
    if( ! $bankCode ){
        return 0;
    }
    
    my $en = Locales->new( "en" );
    
    if ( ! $en->get_territory_from_code( $countryCode ) ){
        return 0;
    }
    
    if ( ! $locationCode ){
        return 0;
    }
    
    if ( ( $candLength == 11 ) && ( ! $branchCode ) ){
        return 0;
    }
    
    ## All is correct
    return 1;
}


=head1 AUTHOR

Jerome Eteve C<< <jerome at eteve.net> >>

=head1 BUGS AND LIMITATIONS

Please report any bugs or feature requests to
C<bug-business-swift at rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Business-SWIFT>.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Business::SWIFT

You can also look for information at:

=over 4

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/Business-SWIFT>

=item * CPAN Ratings

L<http://cpanratings.perl.org/d/Business-SWIFT>

=item * RT: CPAN's request tracker

L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Business-SWIFT>

=item * Search CPAN

L<http://search.cpan.org/dist/Business-SWIFT>

=back

=head1 ACKNOWLEDGEMENTS

=head1 COPYRIGHT & LICENSE

Copyright 2009 Careerjet, all rights reserved.

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

=cut

1; # End of Business::SWIFT