South African (RSA/ZA) ID number validation and easy data extraction Library.
Project description
za_identity_number
ZA / RSA Identity Number Library to validate/check/manipulate and retrieve ID number info for South African IDs
Current version: 0.0.7
Poetry & pip compatibility
Python 3.5 or greater for f-strings
Installation:
pip:
pip install za-id-number
poetry:
poetry add za-id-number
ZA ID Numbers / RSA ID numbers / South African ID numbers:
ZA id numbers are validated by the luhn algorithm, with the last number validating that the entire number is correct.
ZA ID number is broken up into 2 digits birth year, 2 digits birth month, 2 digits birth date, 4 digits for gender, 1 digit for citizenship (za/other), 1 digit race (phased out after 1980) 1 digit for validation.
For more info: https://www.westerncape.gov.za/sites/www.westerncape.gov.za/files/sa-id-number-new.png
Easiest ZA ID validation is the length. The length must be exactly 13 integers.
Example:
from za_id_number.za_id_number import SouthAfricanIdentityValidate if __name__ == "__main__": za_validation = SouthAfricanIdentityValidate("9202204720082") valid = za_validation.validate() za_identity = za_validation.identity() print(f"Valid: {valid}, Identity: {za_identity}")
Logging
As its a library logging is off by default. To get a logger for the library you can use the following example:
logger = SouthAfricanIdentityValidate.get_logger(level=logging.DEBUG) # logger = logging.getLogger("za_id_number") # logger.removeHandler(logging.NullHandler()) # logger.addHandler(logging.StreamHandler()) za_validation = SouthAfricanIdentityValidate("9202204720082") valid = za_validation.validate() za_identity = za_validation.identity() logger.info(f"Valid: {valid}, Identity: {za_identity}") print(SouthAfricanIdentityValidate("99").identity_length())
Classes:
# Validation class, inherits from SouthAfricanIdentityNumber validate_id_obj = SouthAfricanIdentityValidate("9001245289086") # SouthAfricanIdentityNumber class identity_obj = SouthAfricanIdentityNumber("9001245289086") # SouthAfricanIdentityGenerate class generated_id_obj = SouthAfricanIdentityGenerate()
Class Attributes:
# SouthAfricanIdentityValidate SouthAfricanIdentityValidate("9202204720082").valid # SouthAfricanIdentityNumber SouthAfricanIdentityNumber("9202204720082").id_number SouthAfricanIdentityNumber("9202204720082").birthdate SouthAfricanIdentityNumber("9202204720082").year SouthAfricanIdentityNumber("9202204720082").month SouthAfricanIdentityNumber("9202204720082").day SouthAfricanIdentityNumber("9202204720082").gender SouthAfricanIdentityNumber("9202204720082").citizenship SouthAfricanIdentityNumber("9202204720082").age
Methods:
# SouthAfricanIdentityNumber class SouthAfricanIdentityNumber("9202204720082").get_age() SouthAfricanIdentityNumber("9202204720082").get_citizenship() SouthAfricanIdentityNumber("9202204720082").get_gender() SouthAfricanIdentityNumber("9202204720082").calculate_birthday() SouthAfricanIdentityNumber("9202204720082").get_month() SouthAfricanIdentityNumber("9202204720082").get_year() SouthAfricanIdentityNumber("9202204720082").get_day() # SouthAfricanIdentityValidate class # Inherits from SouthAfricanIdentityNumber # All attributes and methods available SouthAfricanIdentityValidate("9202204720082").valid_birth_date() SouthAfricanIdentityValidate("9202204720082").validate() SouthAfricanIdentityValidate("9202204720082").identity() SouthAfricanIdentityValidate("9202204720082").identity_length() # SouthAfricanIdentityGenerate class # Inherits from SouthAfricanIdentityValidate # All attributes and methods available # gender and citizenship can be specified for specific random # id numbers SouthAfricanIdentityGenerate() # or SouthAfricanIdentityGenerate(gender="male", citizenship='citizen') # or from za_id_number.constants import Gender, CitizenshipClass SouthAfricanIdentityGenerate(gender=Gender.FEMALE, citizenship=CitizenshipClass.CITIZEN_BORN) # generate random ID number without using class obj generate_random_id()
Questions/Ideas/Feedback
christogoosen@gmail.com christo@anomaloustech.co.za
Future features:
- Ask for some please
CI/CD
Covers python:
- 3.6
- 3.7
- 3.8
- 3.9
- 3.10 Check CI: https://github.com/c-goosen/za_identity_number/actions
Releases:
- 0.0.7
- Upgrade packages idenitified by github security scanning
- Remove loguru
- Disable loggin in library by default
- Fixed some exceptions
- Removed luhn library for fast-luhn
- fast-luhn adds generate and complete functions
- Generate Random ID numbers
- Generate random luhn numbers of length n
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 za_id_number-0.0.7-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55d9d343eae012cb438eac45511763b304536b4001786a01682e195f70ab07a9 |
|
MD5 | 0e99ffe91602bcecf11a28e6be2c13b1 |
|
BLAKE2-256 | eb31fb56cd217d74ccd5b614bd64dac2442f53393fffa7588b3839c258d3735f |