Business::Barcode::EAN13 - Perform simple validation of an EAN-13 barcode


NAME

Business::Barcode::EAN13 - Perform simple validation of an EAN-13 barcode


SYNOPSIS

  use Business::Barcode::EAN13 qw/valid_barcode check_digit issuer_ccode best_barcode/;
  my $is_valid     = valid_barcode("5023965006028");
  my $check_digit  = check_digit("502396500602"); 
  my $country_code = issuer_ccode("5023965006028");
  my $best_code    = best_barcode(\@barcodes, \@prefs);


DESCRIPTION

These subroutines will tell you whether or not an EAN-13 barcode is self-consistent: i.e. whether or not it checksums correctly. If provided with the 12 digit stem of a barcode it will also return the correct check digit.

We can also return the country in which the manufacturer's identifcation code was registered, and a method for picking a ``most preferred'' barcode from a list, given a preferred country list.


FUNCTIONS

check_digit

my $check_digit = check_digit(``502396500602''); # 8

Given the first 12 digits of a barcode, this will tell you what the last digit should be. This will return undef if the barcode stem is not properly formed.

valid_barcode

my $is_valid = valid_barcode(``5023965006028'');

Tell whether or not the given barcode is valid. This obviously does not check if it a real barcode; only if it is of correct length, and has a valid check-digit.

issuer_ccode

my $country_code = issuer_ccode(``5023965006028''); # ``uk''

Returns the ISO 2 digit country code (you could use Locale::Country, or equivalent, to convert to the country name, if required) of the barcode issuer. (Note: This is not necessarily the same as the country of manufacture of the goods).

This does not test the validity of the barcode.

best_barcode

my $best_barcode = best_barcode(\@list_of_barcodes, \@optional_prefs);

Given an arrayref of barcodes, this will return the ``most preferred'' barcode from the list.

If you don't pass any preferences, this will be the first valid barcode in the list. With a list of ``preferred prefixes'', this will return the best match from your list in order of preference of your prefix. A prefix can either be a numeric barcode stem, or a 2 letter country code, which will be expanded into the list of current barcode stems available to that country.

e.g. if you have a list of 10 barcodes for the same product internationally, and would prefer the UK barcode if it exists, otherwise the Irish one, otherwise any valid barcode, you would call:

  my $best_barcode = best_barcode(\@barcodes, ["uk", "ie"]);

If there are no valid barcodes in your list this will return the first barcode which would be valid if it was zero-padded, or null if none meet this final criterion.


BUGS

When zero-filling the barcodes in ``best_barcode'' we should re-apply the preferences again, rather than just taking the first valid barcode.


TODO

Allow other barcode families than EAN-13


AUTHOR

Colm Dougan and Tony Bowden


BUGS and QUERIES

Please direct all correspondence regarding this module to: bug-Business-Barcode-EAN13@rt.cpan.org


LICENSE

This program may be distributed under the same license as Perl itself.


SEE ALSO

EAN barcode specification: http://www.mecsw.com/specs/ean_13.html

 Business::Barcode::EAN13 - Perform simple validation of an EAN-13 barcode