Skip to content
This repository has been archived by the owner on May 13, 2023. It is now read-only.

waleedhammam/national_id

Repository files navigation

Egyptian national ID validator and data-extractor API

[https://pypi.python.org/pypi/national-id](pypi) Codacy Badge Actions Status codecov.io

Requirments

  • python3.6 or later
  • pip3
  • bottle

How to run

  • Install requirments pip3 install -r requirements.txt
  • Run python3 server.py
  • Server will be running on port 8001
  • Endpoint can be reached at http://localhost:8001/get_info

How to run Using poetry

git clone https://github.com/waleedhammam/national_id
cd national_id
poetry install
python3 server.py

Endpoint

  • /get_info

    • Accepts post requests with "Content-Type: application/json" Header

      • Example request:

        curl -H "Content-Type: application/json" -d '{"id_number": "29009121201812"}' -XPOST http://localhost:8001/get_info
    • Response

      • 200 OK, json_info: national id is validated and info extraction ok
      • 400 Bad Request: Wrong national id number
      • 500 Internal Server Error: Invalid request from user (invalid json, invalid form of data)

      Example response:

      {"nationl_id_data": {"year_of_birth": "1994", "month_of_birth": "9", "day_of_birth": "15", "governorate": "Al Daqhlia", "type": "Male"}}

Validations and checks

The national ID consists of the following:

+-+--+--+--+--+----+-+
|2|90|01|01|12|3456|7|
+--------------------+
|A|B |C |D |E | F  |G|
+-+--+--+--+--+----+-+
  • A -> The century: A=2 From (1900-1999), A=3 From (2000-2099)

  • B~D (Date of birth):

    • B -> Year of birth
    • C -> Month of birth
    • D -> Day of birth
  • E -> Governorate code ex: {12: "Al Daqhlia"}

  • F -> Unique code. (Odd is male, Even is female)

  • G -> Check digit for verification

How to run tests

  • Lib test: pytest -s tests/test_national_id.py
  • Test the endpoint python3 -m pytest -s tests/test_endpoint.py

Dockerfile

  • You can build and run the dockerfile in docker directory docker build -t waleedhammam/national_id .

Pip installable

  • Library national id is pip installable pip install national-id to be used in the whole system

  • Example usage:

    from lib.national_id import NationalID
    instance = NationalID("28510291201512")
    instance.get_info()
    
    Out:
    (True,
     {'year_of_birth': '1985',
      'month_of_birth': '10',
      'day_of_birth': '29',
      'governorate': 'Al Daqhlia',
      'type': 'Male'})