Skip to main content

A check digit library for data validation

Project description

checkdigit logo

GitHub Tests status Codecov PyPi - Downloads CodeFactor Grade LGTM Grade

checkdigit example gif

checkdigit is a pure Python library built for identification numbers. You want to validate a credit card number, or maybe even calculate a missing digit on an ISBN code? We’ve got you covered 😎.

Want to know more? Check out the API Reference and documentation!

Installation

MacPorts 🍎

sudo port install py-checkdigit

PyPi 🐍

pip install checkdigit

✨ Features

  • PEP 561 compatible, with built in support for type checking.

  • Capable of calculating missing digits or validating a block of data.

  • Extensive in-code comments and docstrings to explain how it works behind the scenes. 🪄

✅ Supported Formats

  • Even and odd binary parity

  • Bookland

  • CRC (credit to @sapieninja)

  • EAN-13

  • GS1 (credit to @OtherBarry)

  • ISBN-10

  • ISBN-13

  • Luhn

  • UPC-A

For each of these formats, we provide functions to validate them and calculate missing digits.

Do you have any formats that you’d like to see supported? 🤔 Feel free to raise an issue, or even to send a pull request!

🔨 Contributing

Any change, big or small, that you think can help improve this project is more than welcome 🎉.

As well as this, feel free to open an issue with any new suggestions or bug reports. Every contribution is appreciated.

🏗 Setup

First, fork the project to your account. Then, run the following with your GitHub handle in place of INSERT_GITHUB_NAME:

git clone https://github.com/INSERT_GITHUB_NAME/checkdigit
poetry install && poetry shell
pre-commit install

🏛 Project structure

checkdigit
├── scripts
│   ├── format.sh
│   └── tests.sh
├── checkdigit
│   ├── gs1.py
│   ├── isbn.py
│   ├── luhn.py
│   └── etc.
└── tests

Each new format goes into a separate file which is named accordingly. Similar formats (e.g. ISBN-10 and ISBN-13) should go in the same file.

Before submitting any new changes, please run the format.sh and tests.sh scripts beforehand. Thank you :)

📚 Building the Docs

The documentation can be found in docs/source.

We can use sphinx-autobuild to continuously rebuild the docs when changes are made.

sphinx-autobuild docs/source docs/_build/html

🎪 File structure

Each of the Python files follow the same general format:

# License + File docstring

from checkdigit._data import cleanse, convert


def calculate(data: str) -> str:
    """Determines check digit.

    Args:
        data: A string of data missing a check digit

    Returns:
        str: The single missing check digit (not the whole block of data)
    """
    # This helps to deal with user formatting inconsistencies
    # e.g. spaces, hyphens, etc.
    data = cleanse(data)

    # Deals with 10 or 11 being the possible check digit
    return convert(...)


def validate(data: str) -> bool:
    """Validates a block of data from the check digit.

    Args:
        data: A string representing a full block of data

    Returns:
        bool: A boolean representing whether the data is valid or not
    """
    data = cleanse(data)

    # Remove the check digit and see if it matches
    return calculate(data[:-1]) == data[-1]


def missing(data: str) -> str:
    """Returns the missing digit from a block of data.

    Args:
        data: A string with a question mark in the place of a missing digit.

    Returns:
        A string representing the missing digit (not the whole block of data)
    """
    data = cleanse(data)

    return ...

For similar data formats, the names can be adjusted accordingly (e.g. validate10 for ISBN-10 and validate13 for ISBN-13).

📙 License

This project is licensed under GPL-3.0-or-later.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

checkdigit-0.1.3.tar.gz (22.9 kB view hashes)

Uploaded Source

Built Distribution

checkdigit-0.1.3-py3-none-any.whl (26.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page