PHPackages                             dejodev/laravel-sequence-number-generator - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. dejodev/laravel-sequence-number-generator

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dejodev/laravel-sequence-number-generator
=========================================

Generate complex sequencenumbers using DB locking to ensure each number is unique

v1.0(1y ago)115[2 PRs](https://github.com/W-DEJONG/laravel-sequence-number-generator/pulls)MITPHPPHP ^8.3||^8.4CI passing

Since Apr 4Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/W-DEJONG/laravel-sequence-number-generator)[ Packagist](https://packagist.org/packages/dejodev/laravel-sequence-number-generator)[ Docs](https://github.com/dejodev/laravel-sequence-number-generator)[ GitHub Sponsors]()[ RSS](/packages/dejodev-laravel-sequence-number-generator/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (13)Versions (4)Used By (0)

Generate complex sequence numbers using DB locking to ensure each number is unique.
===================================================================================

[](#generate-complex-sequence-numbers-using-db-locking-to-ensure-each-number-is-unique)

This package allows you to generate complex sequence numbers in Laravel applications. It uses database locking to ensure that each generated number is unique, even in high-concurrency environments. You can configure different sequence types, masks, and yearly resets to suit your application's needs. [![Preview](img/preview.png)](img/preview.png)

Features
--------

[](#features)

- Generate unique sequence numbers using database locking
- Support for custom sequence types
- Configurable sequence masks
- Yearly resets for sequences
- High-concurrency environment support
- Easy configuration via environment variables
- Simple integration with Laravel applications

Basic Usage
-----------

[](#basic-usage)

To generate a sequence number, you can use the facade provided by the package:

```
use DeJoDev\LaravelSequenceNumberGenerator\Facades\SequenceNumber;

// Generate a sequence number with the default configuration
$sequenceNumber = SequenceNumber::generate();
echo $sequenceNumber; // e.g: INV-2025-000001

// Generate a sequence number with a specific configuration
$sequenceNumber = SequenceNumber::generator('custom')->generate();
echo $sequenceNumber; // e.g: MY-TYPE-25-000001P
```

> **Warning** This package uses database locking to ensure that each generated number is unique so you must use a database that supports lockForUpdate() like MySQL, MariaDB or PostgreSQL.

Installation and usage
----------------------

[](#installation-and-usage)

You can install the package via Composer:

```
composer require dejodev/laravel-sequence-number-generator
```

Then publish run the migrations with:

```
php artisan vendor:publish --tag="sequence-number-generator-migrations"
php artisan migrate
```

Set the environment variables in your `.env` file:

```
SEQUENCE_NUMBER_GENERATOR_DEFAULT=default
SEQUENCE_NUMBER_GENERATOR_TYPE=default
SEQUENCE_NUMBER_GENERATOR_MASK='{#}'
SEQUENCE_NUMBER_GENERATOR_IS_YEARLY=false
```

### Environment Variables

[](#environment-variables)

- `SEQUENCE_NUMBER_GENERATOR_DEFAULT`: The default sequence configuration to use. Default is `default`.
- `SEQUENCE_NUMBER_GENERATOR_TYPE`: The type for the default generator. Type is a string value that distinguishes between different sequence generators. Default is `default`.
- `SEQUENCE_NUMBER_GENERATOR_MASK`: The mask format string for the default generator. Default is `{#}`.
- `SEQUENCE_NUMBER_GENERATOR_IS_YEARLY`: Boolean to determine if the default generator should reset yearly. Default is `false`.

### Mask Variables

[](#mask-variables)

The mask format string can contain the following variables:

- `{####}`: The sequential number with leading zeros. The number of `#` characters determines the length of the padding.
- `{Y}`: The full year (e.g., 2025).
- `{y}`: The last two digits of the year (e.g., 25).
- `{T}`: The sequence type.
- `{t}`: First letter of the sequence type.

You can also publish the config file with:

```
php artisan vendor:publish --tag="sequence-number-generator-config"
```

Using the config file, you can define multiple sequence configurations for your application.

```
return [
    'default_generator' => env('SEQUENCE_NUMBER_GENERATOR_DEFAULT', 'default'),

    'default' => [
        'sequence_type' => env('SEQUENCE_NUMBER_GENERATOR_TYPE', 'default'),
        'mask' => env('SEQUENCE_NUMBER_GENERATOR_MASK', '{#}'),
        'is_yearly' => env('SEQUENCE_NUMBER_GENERATOR_IS_YEARLY', false),
    ],

    'customers' => [
        'sequence_type' => 'customers',
        'mask' => '{######}', // e.g: 000001
        'is_yearly' => false,
    ],

    'orders' => [
        'sequence_type' => 'orders',
        'mask' => 'ORD-{y}{######}', // e.g: ORD-25000001
        'is_yearly' => true,
    ],

    'invoices' => [
        'sequence_type' => 'INV',
        'mask' => '{T}-{Y}-{######}', // e.g: INV-2025-000001
        'is_yearly' => true,
    ],
];
```

Then use them like this:

```
use DeJoDev\LaravelSequenceNumberGenerator\Facades\SequenceNumber;

$customerNumber = SequenceNumber::generator('customers')->generate();
echo $customerNumber; // e.g: 000001

$orderNumber = SequenceNumber::generator('orders')->generate();
echo $orderNumber; // e.g: ORD-25000001

$invoiceNumber = SequenceNumber::generator('invoices')->generate();
echo $invoiceNumber; // e.g: INV-2025-000001
```

Advanced Usage
--------------

[](#advanced-usage)

you can also use the `SequenceNumberGenerator` class directly to generate sequence numbers without using the facade. Check out `SequenceNumberGenerator.php` for more advanced usage and customization options.

(c) The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance72

Regular maintenance activity

Popularity9

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 66.7% 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

402d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5acda4ad817c55f09ce10e9837f22a5cfaa6ddd18ffec4cd51ae6ca0be9c31fe?d=identicon)[Wouter de Jong](/maintainers/Wouter%20de%20Jong)

---

Top Contributors

[![W-DEJONG](https://avatars.githubusercontent.com/u/11473780?v=4)](https://github.com/W-DEJONG "W-DEJONG (18 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (6 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (3 commits)")

---

Tags

laravelWouter de Jonglaravel-sequence-number-generator

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/dejodev-laravel-sequence-number-generator/health.svg)

```
[![Health](https://phpackages.com/badges/dejodev-laravel-sequence-number-generator/health.svg)](https://phpackages.com/packages/dejodev-laravel-sequence-number-generator)
```

###  Alternatives

[spatie/laravel-data

Create unified resources and data transfer objects

1.7k28.9M627](/packages/spatie-laravel-data)[spatie/laravel-livewire-wizard

Build wizards using Livewire

4061.0M4](/packages/spatie-laravel-livewire-wizard)[hirethunk/verbs

An event sourcing package that feels nice.

513162.9k6](/packages/hirethunk-verbs)[worksome/exchange

Check Exchange Rates for any currency in Laravel.

123544.7k](/packages/worksome-exchange)[ralphjsmit/livewire-urls

Get the previous and current url in Livewire.

82270.3k4](/packages/ralphjsmit-livewire-urls)[hydrat/filament-table-layout-toggle

Filament plugin adding a toggle button to tables, allowing user to switch between Grid and Table layouts.

6292.3k1](/packages/hydrat-filament-table-layout-toggle)

PHPackages © 2026

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