NAME App::CheckDigitsUtils - Utilities related to check digits (CLI for Algorithm::CheckDigits) VERSION This document describes version 0.001 of App::CheckDigitsUtils (from Perl distribution App-CheckDigitsUtils), released on 2023-01-28. SYNOPSIS DESCRIPTION This distribution includes several utilities related to check digits. They provide CLIs for Algorithm::CheckDigits. * calc-check-digits * check-check-digits * list-check-digits-methods FUNCTIONS calc_check_digits Usage: calc_check_digits(%args) -> [$status_code, $reason, $payload, \%result_meta] Calculate check digit(s) of number(s). Examples: * Calculate a single EAN-8 number: calc_check_digits(numbers => ["9638-507"], method => "ean"); # -> [200, "OK", [96385074], {}] Given a number without the check digit(s), e.g. the first 12 digits of an EAN-13, generate/complete the check digits. Keywords: complete This function is not exported. Arguments ('*' denotes required arguments): * method => *str* (No description) * numbers* => *array[str]* Numbers without the check digit(s). Returns an enveloped result (an array). First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata. Return value: (any) check_check_digits Usage: check_check_digits(%args) -> [$status_code, $reason, $payload, \%result_meta] Check the check digit(s) of numbers. Examples: * Check a single EAN-8 number (valid, exit code will be zero, message output to STDOUT): check_check_digits(numbers => ["9638-5074"], method => "ean"); Result: [ 200, "All success", undef, { results => [{ item_id => 96385074, message => "OK", status => 200 }], }, ] * Check a single EAN-8 number (valid, exit code will be zero, no message): check_check_digits(numbers => ["9638-5074"], method => "ean", quiet => 1); Result: [ 200, "All success", undef, { results => [{ item_id => 96385074, message => "OK", status => 200 }], }, ] * Check a single EAN-8 number (invalid, exit code is non-zero, message output to STDOUT): check_check_digits(numbers => ["9638-5070"], method => "ean"); Result: [ 400, "Incorrect check digit(s)", undef, { results => [ { item_id => 96385070, message => "Incorrect check digit(s)", status => 400, }, ], }, ] * Check a single EAN-8 number (invalid, exit code is non-zero, no message): check_check_digits(numbers => ["9638-5070"], method => "ean", quiet => 1); Result: [ 400, "Incorrect check digit(s)", undef, { results => [ { item_id => 96385070, message => "Incorrect check digit(s)", status => 400, }, ], }, ] Given a list of numbers, e.g. EAN-8 numbers, will check the check digit(s) of each number. Exit code will be non-zero all numbers are invalid. To check for individual numbers, use the JSON output. This function is not exported. Arguments ('*' denotes required arguments): * method => *str* (No description) * numbers* => *array[str]* (No description) * quiet => *bool* If set to true, don't output message to STDOUT. Returns an enveloped result (an array). First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata. Return value: (any) list_check_digits_methods Usage: list_check_digits_methods(%args) -> [$status_code, $reason, $payload, \%result_meta] List methods supported by Algorithm::CheckDigits. Examples: * List methods: list_check_digits_methods(); Result: [ 200, "OK", [ "2aus5", "aba_rn", "ahv_ch", "amex", "bahncard", "betriebsnummer", "blutbeutel", "bwpk_de", "bzue_de", "cas", "ccc_es", "code_39", "cpf", "cusip", "dem", "diners", "discover", "dni_es", "ean", "ecno", "einecs", "elincs", "enroute", "esr5_ch", "esr9_ch", "eurocard", "euronote", "happydigits", "hkid", "iban", "identcode_dp", "iln", "imei", "imeisv", "isan", "isbn", "isbn13", "isin", "ismn", "issn", "jcb", "klubkarstadt", "leitcode_dp", "mastercard", "miles&more", "nhs_gb", "nip", "nric_sg", "nve", "pa_de", "pkz", "postcheckkonti", "pzn", "rentenversicherung", "sedol", "sici", "siren", "siret", "tin_ie", "titulo_eleitor", "upc", "ups", "ustid_at", "ustid_be", "ustid_de", "ustid_dk", "ustid_fi", "ustid_gr", "ustid_ie", "ustid_lu", "ustid_nl", "ustid_pl", "ustid_pt", "vat_sl", "vatrn_at", "vatrn_be", "vatrn_dk", "vatrn_fi", "vatrn_gr", "vatrn_ie", "vatrn_lu", "vatrn_nl", "vatrn_pl", "vatrn_pt", "verhoeff", "visa", "wagonnr_br", ], {}, ] * List methods with their summaries/descriptions: list_check_digits_methods(detail => 1); Result: [ 200, "OK", [ { method => "2aus5", summary => "2 aus 5, 2 of 5, 2/5" }, { method => "aba_rn", summary => "American Bankers Association routing number (ABA RN)", }, { method => "ahv_ch", summary => "Alters- und Hinterlassenenversicherungsnummer, AHV (CH)", }, { method => "amex", summary => "American Express credit cards" }, { method => "bahncard", summary => "DB Bahncard (DE)" }, { method => "betriebsnummer", summary => "Betriebsnummer (DE)" }, { method => "blutbeutel", summary => "Eurocode, blood bags" }, { method => "bwpk_de", summary => "Personenkennummer der Bundeswehr (DE)", }, { method => "bzue_de", summary => "Beleglose Zahlschein\xC3\xBCberweisung, BZ\xC3\x9C (DE)", }, { method => "cas", summary => "Chemical abstract service, CAS" }, { method => "ccc_es", summary => "C\xC3\xB3digo de Cuenta Corriente, CCC (ES)", }, { method => "code_39", summary => "Code39, 3 of 9" }, { method => "cpf", summary => "Cadastro de Pessoas F\xC3\xADsicas, CPF (BR)", }, { method => "cusip", summary => "Committee on Uniform Security Identification Procedures, CUSIP (US)", }, { method => "dem", summary => "Deutsche Mark Banknoten, DEM" }, { method => "diners", summary => "Diner's club credit cards" }, { method => "discover", summary => "Discover credit cards" }, { method => "dni_es", summary => "Documento nacional de identidad (ES)", }, { method => "ean", summary => "European Article Number, EAN" }, { method => "ecno", summary => "European Commission number, EC-No (for chemicals)", }, { method => "einecs", summary => "European Inventory of Existing Commercial Chemical Substances, EINECS", }, { method => "elincs", summary => "European List of Notified Chemical Substances, ELINCS", }, { method => "enroute", summary => "EnRoute credit cards" }, { method => "esr5_ch", summary => "Einzahlungsschein mit Referenz, ESR5 (CH)", }, { method => "esr9_ch", summary => "Einzahlungsschein mit Referenz, ESR9 (CH)", }, { method => "eurocard", summary => "Eurocard credit cards" }, { method => "euronote", summary => "Euro bank notes, EUR" }, { method => "happydigits", summary => "Happy Digits (DE)" }, { method => "hkid", summary => "Hong Kong Identity Card, HKID (HK)" }, { method => "iban", summary => "International Bank Account Number (IBAN)", }, { method => "identcode_dp", summary => "Identcode Deutsche Post AG (DE)", }, { method => "iln", summary => "Global Location Number, GLN" }, { method => "imei", summary => "International Mobile Station Equipment Identity, IMEI", }, { method => "imeisv", summary => "International Mobile Station Equipment Identity and Software Version Number", }, { method => "isan", summary => "International Standard Audiovisual Number, ISAN", }, { method => "isbn", summary => "International Standard Book Number, ISBN10", }, { method => "isbn13", summary => "International Standard Book Number, ISBN13", }, { method => "isin", summary => "International Securities Identifikation Number, ISIN", }, { method => "ismn", summary => "International Standard Music Number, ISMN", }, { method => "issn", summary => "International Standard Serial Number, ISSN", }, { method => "jcb", summary => "JCB credit cards" }, { method => "klubkarstadt", summary => "Klub Karstadt (DE)" }, { method => "leitcode_dp", summary => "Leitcode Deutsche Post AG (DE)", }, { method => "mastercard", summary => "Mastercard credit cards" }, { method => "miles&more", summary => "Miles & More, Lufthansa (DE)" }, { method => "nhs_gb", summary => "National Health Service, NHS (GB)" }, { method => "nip", summary => "numer identyfikacji podatkowej, NIP" }, { method => "nric_sg", summary => "National Registration Identity Card, NRIC (SG)", }, { method => "nve", summary => "Nummer der Versandeinheit, NVE, SSCC" }, { method => "pa_de", summary => "Personalausweis (DE)" }, { method => "pkz", summary => "Personenkennzahl der DDR" }, { method => "postcheckkonti", summary => "Postscheckkonti (CH)" }, { method => "pzn", summary => "Pharmazentralnummer (DE)" }, { method => "rentenversicherung", summary => "Rentenversicherungsnummer, VSNR (DE)", }, { method => "sedol", summary => "Stock Exchange Daily Official List, SEDOL (GB)", }, { method => "sici", summary => "Value Added Tax number, VAT (DE)" }, { method => "siren", summary => "SIREN (FR)" }, { method => "siret", summary => "SIRET (FR)" }, { method => "tin_ie", summary => "Tax Identification Number (IE)" }, { method => "titulo_eleitor", summary => "T\xC3\xADtulo Eleitoral (BR)", }, { method => "upc", summary => "Universal Product Code, UPC (US, CA)" }, { method => "ups", summary => "United Parcel Service, UPS" }, { method => "ustid_at", summary => "Umsatzsteuer-Identifikationsnummer (AT)", }, { method => "ustid_be", summary => "Umsatzsteuer-Identifikationsnummer (BE)", }, { method => "ustid_de", summary => "Umsatzsteuer-Identifikationsnummer (DE)", }, { method => "ustid_dk", summary => "Umsatzsteuer-Identifikationsnummer (DK)", }, { method => "ustid_fi", summary => "Umsatzsteuer-Identifikationsnummer (FI)", }, { method => "ustid_gr", summary => "Umsatzsteuer-Identifikationsnummer (GR)", }, { method => "ustid_ie", summary => "Umsatzsteuer-Identifikationsnummer (IE)", }, { method => "ustid_lu", summary => "Umsatzsteuer-Identifikationsnummer (LU)", }, { method => "ustid_nl", summary => "Umsatzsteuer-Identifikationsnummer (NL)", }, { method => "ustid_pl", summary => "Umsatzsteuer-Identifikationsnummer (PL)", }, { method => "ustid_pt", summary => "Umsatzsteuer-Identifikationsnummer (PT)", }, { method => "vat_sl", summary => "Value Added Tax number, VAT (SL)" }, { method => "vatrn_at", summary => "Value Added Tax number, VAT (AT)" }, { method => "vatrn_be", summary => "Value Added Tax number, VAT (BE)" }, { method => "vatrn_dk", summary => "Value Added Tax number, VAT (DK)" }, { method => "vatrn_fi", summary => "Value Added Tax number, VAT (FI)" }, { method => "vatrn_gr", summary => "Value Added Tax number, VAT (GR)" }, { method => "vatrn_ie", summary => "Value Added Tax number, VAT (IE)" }, { method => "vatrn_lu", summary => "Value Added Tax number, VAT (LU)" }, { method => "vatrn_nl", summary => "Value Added Tax number, VAT (NL)" }, { method => "vatrn_pl", summary => "Value Added Tax number, VAT (PL)" }, { method => "vatrn_pt", summary => "Value Added Tax number, VAT (PT)" }, { method => "verhoeff", summary => "Verhoeff scheme" }, { method => "visa", summary => "VISA credit cards" }, { method => "wagonnr_br", summary => "Codifica\xC3\xA7\xC3\xA3o dos vag\xC3\xB5es (BR)", }, ], { "table.fields" => ["method", "summary"] }, ] This function is not exported. Arguments ('*' denotes required arguments): * detail => *bool* (No description) Returns an enveloped result (an array). First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata. Return value: (any) HOMEPAGE Please visit the project's homepage at <https://metacpan.org/release/App-CheckDigitsUtils>. SOURCE Source repository is at <https://github.com/perlancar/perl-App-CheckDigitsUtils>. SEE ALSO Algorithm::CheckDigits For EAN-8 and EAN-13 only, there is App::EANUtils. AUTHOR perlancar <perlancar@cpan.org> CONTRIBUTING To contribute, you can send patches by email/via RT, or send pull requests on GitHub. Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via: % prove -l If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me. COPYRIGHT AND LICENSE This software is copyright (c) 2023 by perlancar <perlancar@cpan.org>. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. BUGS Please report any bugs or feature requests on the bugtracker website <https://rt.cpan.org/Public/Dist/Display.html?Name=App-CheckDigitsUtils> When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.