PHPackages                             a-j-n/egyptian-national-id-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. a-j-n/egyptian-national-id-laravel

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

a-j-n/egyptian-national-id-laravel
==================================

Egyptian National ID validation, parsing, and generation package for PHP and Laravel.

v1.0.1(2mo ago)02MITPHPPHP ^8.2

Since Mar 3Pushed 2mo agoCompare

[ Source](https://github.com/a-j-n/EG-ID)[ Packagist](https://packagist.org/packages/a-j-n/egyptian-national-id-laravel)[ RSS](/packages/a-j-n-egyptian-national-id-laravel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (3)Used By (0)

Egyptian National ID Laravel Package
====================================

[](#egyptian-national-id-laravel-package)

PHP and Laravel package for Egyptian National ID:

- validation
- parsing
- generation
- sanitization (including Arabic numerals)

Credits
-------

[](#credits)

This package is a PHP/Laravel adaptation of the original project by Mahmoud Ebeid (`mahmoudEbeid2`):

Installation
------------

[](#installation)

```
composer require a-j-n/egyptian-national-id-laravel
```

Laravel package discovery is enabled automatically.

Laravel Setup
-------------

[](#laravel-setup)

For Laravel 10/11/12, no manual setup is needed after install. The package uses Laravel auto-discovery via `composer.json` (`extra.laravel.providers` and `extra.laravel.aliases`).

To verify discovery in Laravel 12:

```
php artisan package:discover
```

Then test quickly in Tinker:

```
php artisan tinker
```

```
app(EgyptianNationalId\NationalIdService::class)->validate('30001010123456');
```

If you need manual registration, add:

```
// config/app.php
'providers' => [
    EgyptianNationalId\EgyptianNationalIdServiceProvider::class,
],

'aliases' => [
    'NationalId' => EgyptianNationalId\Facades\NationalId::class,
],
```

Quick Usage
-----------

[](#quick-usage)

```
use EgyptianNationalId\NationalIdService;

$service = app(NationalIdService::class);

$isValid = $service->validate('30001010123456');
$id = $service->generate(['gender' => 'Male']);
$parsed = $service->parse($id);
```

Facade Usage
------------

[](#facade-usage)

```
use EgyptianNationalId\Facades\NationalId;

$isValid = NationalId::validate('30001010123456');
$parsed = NationalId::parse('30001010123456');
```

Validation Rule (String)
------------------------

[](#validation-rule-string)

```
$request->validate([
    'national_id' => ['required', 'national_id'],
]);
```

Validation Rule (Class)
-----------------------

[](#validation-rule-class)

```
use EgyptianNationalId\Rules\NationalIdRule;

$request->validate([
    'national_id' => ['required', new NationalIdRule()],
]);
```

Parse Result Shape
------------------

[](#parse-result-shape)

```
[
  'national_id' => '...',
  'birth_date' => DateTimeImmutable,
  'birth_year' => 1998,
  'birth_month' => 7,
  'birth_day' => 21,
  'age' => 27,
  'gender' => 'Male'|'Female',
  'governorate' => ['code' => 1, 'name_en' => 'Cairo', 'name_ar' => 'Al Qahirah', 'region' => 'Cairo'],
  'region' => 'Cairo',
  'inside_egypt' => true,
  'is_adult' => true
]
```

API
---

[](#api)

- `sanitize(string|int|null $id): string`
- `validate(string|int|null $id): bool`
- `parse(string|int|null $id): array`
- `extractBirthDate(string|int|null $id): DateTimeImmutable`
- `extractGender(string|int|null $id): string`
- `extractGovernorate(string|int|null $id): ?array`
- `calculateAge(DateTimeInterface $birthDate, ?DateTimeInterface $at = null): int`
- `generate(array $options = []): string`

### Generate Options

[](#generate-options)

- `birth_year` (int)
- `birth_month` (int)
- `birth_day` (int)
- `governorate_code` (int)
- `gender` (`Male` or `Female`)

License
-------

[](#license)

MIT

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance86

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

70d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4915a8c2f98725232e2e8ed0cbc954a999529fb364a7d4d834013d039d98eb85?d=identicon)[a-j-n](/maintainers/a-j-n)

---

Top Contributors

[![a-j-n-a](https://avatars.githubusercontent.com/u/129997997?v=4)](https://github.com/a-j-n-a "a-j-n-a (3 commits)")

---

Tags

phplaravelvalidationnational idEgypt

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/a-j-n-egyptian-national-id-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/a-j-n-egyptian-national-id-laravel/health.svg)](https://phpackages.com/packages/a-j-n-egyptian-national-id-laravel)
```

###  Alternatives

[propaganistas/laravel-phone

Adds phone number functionality to Laravel based on Google's libphonenumber API.

3.0k35.7M107](/packages/propaganistas-laravel-phone)[proengsoft/laravel-jsvalidation

Validate forms transparently with Javascript reusing your Laravel Validation Rules, Messages, and FormRequest

1.1k2.3M49](/packages/proengsoft-laravel-jsvalidation)[axlon/laravel-postal-code-validation

Worldwide postal code validation for Laravel and Lumen

3853.3M1](/packages/axlon-laravel-postal-code-validation)[wendelladriel/laravel-validated-dto

Data Transfer Objects with validation for Laravel applications

759569.4k13](/packages/wendelladriel-laravel-validated-dto)[laravel-validation-rules/credit-card

Validate credit card number, expiration date, cvc

2412.2M5](/packages/laravel-validation-rules-credit-card)[galahad/laravel-addressing

Laravel package providing addressing functionality

70316.6k](/packages/galahad-laravel-addressing)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
