PHPackages                             metalinvestremko/laravel-egn - 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. metalinvestremko/laravel-egn

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

metalinvestremko/laravel-egn
============================

Laravel package for validating and generating Bulgarian EGN (ЕГН).

v1.0.0(4mo ago)13MITPHPPHP ^8.1CI passing

Since Feb 22Pushed 4mo agoCompare

[ Source](https://github.com/MetalinvestRemko/laravel-egn)[ Packagist](https://packagist.org/packages/metalinvestremko/laravel-egn)[ Docs](https://egn.bg/)[ RSS](/packages/metalinvestremko-laravel-egn/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (4)Versions (2)Used By (0)

Laravel EGN
===========

[](#laravel-egn)

[![Latest Stable Version](https://camo.githubusercontent.com/8d2da15314c7afcea5211ada36ccb660ed3bac842e2544f3d3873e3397c07765/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d6574616c696e7665737472656d6b6f2f6c61726176656c2d65676e3f7374796c653d666c61742d737175617265)](https://packagist.org/packages/metalinvestremko/laravel-egn)[![Total Downloads](https://camo.githubusercontent.com/c2e407fffa50a0125c648c88ad2bdcf40c73883faa4951ba391a41b28a29622e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d6574616c696e7665737472656d6b6f2f6c61726176656c2d65676e3f7374796c653d666c61742d737175617265)](https://packagist.org/packages/metalinvestremko/laravel-egn)[![License](https://camo.githubusercontent.com/261a0a7d49807c88579fd6fa99301adc1400f11eb934bd6af583b7e9c1fddd0b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6d6574616c696e7665737472656d6b6f2f6c61726176656c2d65676e3f7374796c653d666c61742d737175617265)](https://packagist.org/packages/metalinvestremko/laravel-egn)[![PHP Version](https://camo.githubusercontent.com/89c3e53e6ceddea8b9adee10f173bb40df17cead252aebbd7c73239d5a4cb2c6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646570656e64656e63792d762f6d6574616c696e7665737472656d6b6f2f6c61726176656c2d65676e2f7068703f7374796c653d666c61742d737175617265)](https://packagist.org/packages/metalinvestremko/laravel-egn)[![Tests](https://github.com/MetalinvestRemko/laravel-egn/actions/workflows/tests.yml/badge.svg)](https://github.com/MetalinvestRemko/laravel-egn/actions/workflows/tests.yml)

A Laravel package for validating, parsing, and generating Bulgarian EGN numbers (ЕГН).

Features
--------

[](#features)

- Validate Bulgarian EGN numbers
- Parse EGN into birth date and gender
- Generate valid EGN numbers with optional constraints:
    - gender (`male|female|m|f`)
    - exact date (`date`) or partial date (`year`, `month`, `day`)
    - region prefix (`0..99`)
    - batch generation (`generate($count, ...)`)
- Resolve rich EGN metadata via `details()`:
    - localized output (`bg` / `en`)
    - birth date formatting and weekday
    - age
    - region name and serial range
    - birth order within region parity
    - zodiac sign
- Native Laravel validation rule: `egn`

Requirements
------------

[](#requirements)

- PHP `^8.1`
- Laravel components:
    - `illuminate/support ^10.0|^11.0|^12.0`
    - `illuminate/validation ^10.0|^11.0|^12.0`

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

[](#installation)

```
composer require metalinvestremko/laravel-egn
```

Configuration (Optional)
------------------------

[](#configuration-optional)

Publish the config file:

```
php artisan vendor:publish --tag=egn-config
```

Config file: `config/egn.php`

```
return [
    'start_year' => 1800,
    'end_year' => 2099,
];
```

These values define the default random generation range when `year` is not explicitly provided.

Usage
-----

[](#usage)

### Validate EGN

[](#validate-egn)

```
use MetalinvestRemko\LaravelEgn\Facades\Egn;

$isValid = Egn::validate('6101057509'); // true
```

### Laravel Validation Rule

[](#laravel-validation-rule)

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

### Parse EGN

[](#parse-egn)

```
$parsed = Egn::parse('6101057509');

// [
//   'year' => 1961,
//   'month' => 1,
//   'day' => 5,
//   'gender' => 0, // 0 = female, 1 = male
// ]
```

### Get Detailed Metadata

[](#get-detailed-metadata)

```
$detailsArray = Egn::details('8702260780'); // default format: array
$detailsObject = Egn::details('8702260780', 'object');
$detailsCollection = Egn::details('8702260780', 'collection');
$detailsEn = Egn::details('8702260780', 'array', 'en');
```

`details()` returns `null` for invalid EGN.

Locale behavior:

- If locale is provided, only `bg` and `en` are accepted
- Unsupported locale values fallback to `bg`
- If locale is omitted, package attempts `app()->getLocale()` and still restricts to `bg|en`

Example (`array`, `en` locale):

```
[
    'egn' => '8702260780',
    'valid' => true,
    'locale' => 'en',
    'gender' => 'female',
    'gender_code' => 'female',
    'birth_date' => [
        'iso' => '1987-02-26',
        'year' => 1987,
        'month' => 2,
        'day' => 26,
        'weekday' => 'Thursday',
        'formatted' => '26 February 1987 (Thursday) (1987-02-26)',
    ],
    'age' => 38,
    'region' => [
        'code' => 78,
        'name' => 'Burgas',
        'range_start' => 44,
        'range_end' => 93,
    ],
    'birth_order' => 18,
    'zodiac' => [
        'name' => 'Pisces',
        'range' => '19 February - 20 March',
        'label' => 'Pisces (19 February - 20 March)',
    ],
]
```

### Generate One EGN

[](#generate-one-egn)

All options are optional.

```
$egn = Egn::generateOne([
    'gender' => 'female', // male|female|m|f
    'year' => 1996,       // optional
    'month' => 8,         // optional
    'day' => 14,          // optional
    'region' => 22,       // optional, 0..99
]);
```

### Generate Multiple EGNs

[](#generate-multiple-egns)

```
$egns = Egn::generate(50, [
    'month' => 2,
    'day' => 29,
]);
```

### Use Exact Date

[](#use-exact-date)

```
$egn = Egn::generateOne([
    'date' => '2004-06-12',
    'gender' => 'male',
]);
```

`date` accepts `DateTimeInterface|string|null`.

Generation Options Reference
----------------------------

[](#generation-options-reference)

- `gender`: `male|female|m|f`
- `date`: exact date as `DateTimeInterface|string`
- `year`: integer in configured range
- `month`: integer `1..12`
- `day`: integer `1..31` (validated against month/year)
- `region`: integer `0..99`

Notes:

- `date` takes precedence over `year/month/day`
- Invalid combinations (for example impossible date constraints) throw `InvalidArgumentException`

Region Mapping
--------------

[](#region-mapping)

The package resolves region names from the EGN serial (digits 7-9) using inclusive upper bounds.

Upper BoundRegion (EN)`43`Blagoevgrad`93`Burgas`139`Varna`169`Veliko Tarnovo`183`Vidin`217`Vratsa`233`Gabrovo`281`Kardzhali`301`Kyustendil`319`Lovech`341`Montana`377`Pazardzhik`395`Pernik`435`Pleven`501`Plovdiv`527`Razgrad`555`Ruse`575`Silistra`601`Sliven`623`Smolyan`721`Sofia City`751`Sofia District`789`Stara Zagora`821`Dobrich`843`Targovishte`871`Haskovo`903`Shumen`925`Yambol`999`Other / UnknownAPI Reference
-------------

[](#api-reference)

```
validate(string $egn): bool
parse(string $egn): ?array
details(string $egn, string $format = 'array', ?string $locale = null): array|object|collection|null
generateOne(array $options = []): string
generate(int $count = 1, array $options = []): array
```

Testing
-------

[](#testing)

```
composer test
```

Contributing
------------

[](#contributing)

Contributions are welcome. Please open an issue or pull request with a clear description and test coverage for behavioral changes.

Security
--------

[](#security)

If you discover a security issue, please report it privately to the maintainer before opening a public issue.

Related Website
---------------

[](#related-website)

- [Check and generate valid Bulgarian EGN numbers](https://egn.bg/)

License
-------

[](#license)

MIT License. See [LICENSE](LICENSE).

###  Health Score

34

—

LowBetter than 75% of packages

Maintenance76

Regular maintenance activity

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity43

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

Unknown

Total

1

Last Release

132d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d57a8b42a14526b8f8da20e596004fe458ad39d7b9c31a6f50ac5719264aa614?d=identicon)[MetalinvestRemko](/maintainers/MetalinvestRemko)

---

Top Contributors

[![MetalinvestRemko](https://avatars.githubusercontent.com/u/129035378?v=4)](https://github.com/MetalinvestRemko "MetalinvestRemko (3 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/metalinvestremko-laravel-egn/health.svg)

```
[![Health](https://phpackages.com/badges/metalinvestremko-laravel-egn/health.svg)](https://phpackages.com/packages/metalinvestremko-laravel-egn)
```

###  Alternatives

[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

77022.3M151](/packages/laravel-mcp)[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8793.2M25](/packages/yajra-laravel-oci8)[spatie/laravel-honeypot

Preventing spam submitted through forms

1.6k6.8M75](/packages/spatie-laravel-honeypot)[propaganistas/laravel-disposable-email

Disposable email validator

6023.0M7](/packages/propaganistas-laravel-disposable-email)[axlon/laravel-postal-code-validation

Worldwide postal code validation for Laravel

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

Data Transfer Objects with validation for Laravel applications

762649.9k18](/packages/wendelladriel-laravel-validated-dto)

PHPackages © 2026

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