slashlab/numerik-laravel

Laravel validation rules for Polish identification numbers (PESEL, NIP, REGON, KRS) — powered by slashlab/numerik.

Maintainers

Package info

github.com/Sqrcz/numerik-laravel

pkg:composer/slashlab/numerik-laravel

Fund package maintenance!

Buy Me A Coffee

Statistics

Installs: 25

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.2.0 2026-04-30 22:10 UTC

This package is auto-updated.

Last update: 2026-04-30 22:14:51 UTC


README

Tests Latest Version PHP Version License

Laravel validation rules for Polish identification numbers — PESEL, NIP, REGON, and KRS. Powered by slashlab/numerik.

Requirements

  • PHP 8.3+
  • Laravel 11, 12, or 13

Installation

composer require slashlab/numerik-laravel

The service provider is auto-discovered — no manual registration needed.

Usage

Validation rules

Use the rules in form requests or Validator::make() calls:

use SlashLab\NumerikLaravel\Rules\PeselRule;
use SlashLab\NumerikLaravel\Rules\NipRule;
use SlashLab\NumerikLaravel\Rules\RegonRule;
use SlashLab\NumerikLaravel\Rules\KrsRule;

public function rules(): array
{
    return [
        'pesel' => ['required', new PeselRule()],
        'nip'   => ['required', new NipRule()],
        'regon' => ['required', new RegonRule()],
        'krs'   => ['required', new KrsRule()],
    ];
}

Strict mode

All rules accept an optional strict parameter (default true). In strict mode, PESELs with future birth dates or all-identical digits are rejected:

new PeselRule(strict: false)

Validation messages

Class-based rules return a specific message for each failure reason — for example, a NIP with a wrong checksum digit returns a different message than one with an invalid length.

Error messages use the field label registered in validation.attributes when one is found, matching the behaviour of Laravel's built-in rules. If no label is registered, the field name is humanised (underscores replaced with spaces, first letter capitalised).

The package ships with English (en) and Polish (pl) translations. To publish and customise them:

php artisan vendor:publish --tag=numerik-lang

String-based rules

Rules are also available as strings via the service provider:

'pesel' => ['required', 'pesel'],
'nip'   => ['required', 'nip'],
'regon' => ['required', 'regon'],
'krs'   => ['required', 'krs'],

String-based rules always return a generic message regardless of the failure reason. Use the class-based rules when specific messages matter.

Changelog

See CHANGELOG.md.

Contributing

See CONTRIBUTING.md.

Security

See SECURITY.md.

License

MIT — see LICENSE.

If this saved you time → ☕ Buy me a coffee