Napolean Paced Mischeviously

    TypeScript icon, indicating that this package has built-in type declarations

    3.1.3 • Public • Published

    cdigit: Check Digit Algorithms in JS

    npm License

    cdigit - Collection of check digit algorithms implemented in JavaScript



    const { luhn } = require("cdigit");
    // Luhn (a.k.a. Mod 10) algorithm
    console.log(luhn.compute("1234")); // "4"
    console.log(luhn.generate("1234")); // "12344"
    console.log(luhn.validate("12344")); // true


    # Damm algorithm
    npx cdigit --algo damm compute 1234
    npx cdigit --algo damm generate 1234
    npx cdigit --algo damm validate 12340

    Supported Algorithms

    Generic Algorithms

    Algorithm cdigit name Input string Check character(s)
    Luhn luhn Numeric (0-9) 1 digit (0-9)
    Verhoeff verhoeff Numeric (0-9) 1 digit (0-9)
    Damm damm Numeric (0-9) 1 digit (0-9)

    ISO/IEC 7064 Family

    ISO/IEC 7064 describes eight generic check digit (character) systems for numeric, alphabetic, and alphanumeric strings. ISO/IEC 7064 specifies two types of systems that use the same algorithm with different parameters: Pure systems (MOD 11-2, MOD 37-2, MOD 97-10, MOD 661-26, and MOD 1271-36) and Hybrid systems (MOD 11-10, MOD 27-26, and MOD 37-36).

    Algorithm cdigit name Input string Check character(s)
    ISO/IEC 7064, MOD 11-2 mod11_2 Numeric (0-9) 1 digit or 'X' (0-9X)
    ISO/IEC 7064, MOD 37-2 mod37_2 Alphanumeric (0-9A-Z) 1 digit, letter, or '*' (0-9A-Z*)
    ISO/IEC 7064, MOD 97-10 mod97_10 Numeric (0-9) 2 digits (0-9)
    ISO/IEC 7064, MOD 661-26 mod661_26 Alphabetic (A-Z) 2 letters (A-Z)
    ISO/IEC 7064, MOD 1271-36 mod1271_36 Alphanumeric (0-9A-Z) 2 digits or letters (0-9A-Z)
    ISO/IEC 7064, MOD 11-10 mod11_10 Numeric (0-9) 1 digit (0-9)
    ISO/IEC 7064, MOD 27-26 mod27_26 Alphabetic (A-Z) 1 letter (A-Z)
    ISO/IEC 7064, MOD 37-36 mod37_36 Alphanumeric (0-9A-Z) 1 digit or letter (0-9A-Z)

    GTIN (Global Trade Item Number) Family

    GTINs are internationally unified product identification numbers that are often (or historically) referred to as UPC, EAN, ISBN-13, etc. GTINs have several variations in length but share the identical check digit algorithm; therefore, cdigit currently provides only one generic gtin object for GTINs and other GS1 data structures. Note that cdigit.gtin does not check the length or semantic validity of a given GTIN string.

    Algorithm cdigit name Input string Check character(s) Also known as
    GTIN-8 gtin Numeric (0-9) 1 digit (0-9) EAN-8
    GTIN-12 gtin Numeric (0-9) 1 digit (0-9) UPC, UPC-A
    GTIN-13 gtin Numeric (0-9) 1 digit (0-9) EAN, JAN, ISBN-13, etc.
    GTIN-14 gtin Numeric (0-9) 1 digit (0-9) EAN, UCC-14

    Usage - Node.js

    Load algorithm objects using the cdigit names listed in Supported Algorithms section.

    const { mod97_10 } = require("cdigit");

    Algorithm objects implement the following methods:

    validate(numWithCC: string): boolean

    Check if a given string is valid according to the algorithm. The argument must be a combined string of check digit(s) and their original number.

    console.log(mod97_10.validate("123482")); // true

    generate(numWithoutCC: string): string

    Generate a valid number string from a given string in accordance with the algorithm. The generated string includes the original string and computed check digit(s) that are combined in the manner specified by the algorithm.

    console.log(mod97_10.generate("1234")); // "123482"

    compute(numWithoutCC: string): string

    Generate check digit(s) from a given number. Unlike generate(), this method returns the check digit(s) only.

    console.log(mod97_10.compute("1234")); // "82"

    See example.js for usage examples.

    Usage - Command-line

    Usage: cdigit [options] [command]
      -a, --algo <name>  specify check digit algorithm by name
      -h, --help         output usage information
      validate <string>  check if string is valid
      generate <string>  generate valid number from string
      compute <string>   compute check digit from string

    -a, --algo <name> option accepts the names listed in Supported Algorithms section and defaults to luhn or the value of CDIGIT_CLI_DEFAULT_ALGO environment variable (if set).


    Copyright (c) 2018-2022 LiosK

    Licensed under either of

    at your option.


    Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


    npm i cdigit

    DownloadsWeekly Downloads





    (MIT OR Apache-2.0)

    Unpacked Size

    49.6 kB

    Total Files


    Last publish


    • liosk