A check digit library for data validation
Project description
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
Issue Tracker: https://github.com/harens/checkdigit/issues
Source Code: https://github.com/harens/checkdigit
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for checkdigit-0.1.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a22ab4840630432da2e2159232724d255a6ed8fcab961560e0cd5ee452e50ec |
|
MD5 | 323eac6710d53924822292f6124b424a |
|
BLAKE2b-256 | e4f5bdce5a95437a803db6edd0d22052306a83989f0b59323281ca633739cf03 |