PHPackages                             pamungkasandono/laravel-nanamber - 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. pamungkasandono/laravel-nanamber

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

pamungkasandono/laravel-nanamber
================================

Nanamber adalah library Laravel untuk membuat penomoran otomatis (auto number) dengan format yang fleksibel dan dapat dikustomisasi. Umum digunakan untuk penomoran dokumen, invoice, registrasi, dan sebagainya.

v1.1.0(1y ago)123MITPHPPHP ^8.2CI failing

Since Apr 9Pushed 1y ago1 watchersCompare

[ Source](https://github.com/pamungkasandono/laravel-nanamber)[ Packagist](https://packagist.org/packages/pamungkasandono/laravel-nanamber)[ Docs](https://github.com/pamungkasandono/laravel-nanamber)[ GitHub Sponsors]()[ RSS](/packages/pamungkasandono-laravel-nanamber/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (13)Versions (3)Used By (0)

Nanamber Documentation
======================

[](#nanamber-documentation)

[![Latest Version on Packagist](https://camo.githubusercontent.com/257fb7a1d59f765b532d7b7416223c407f9b0969e7c7d7d1149c06ee33ec2b22/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f70616d756e676b6173616e646f6e6f2f6c61726176656c2d6e616e616d6265722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/pamungkasandono/laravel-nanamber)[![GitHub Tests Action Status](https://camo.githubusercontent.com/f6b671c2ba20cecde32c978debce4612674232326d13cfda3982410957115ba6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f70616d756e676b6173616e646f6e6f2f6c61726176656c2d6e616e616d6265722f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/pamungkasandono/laravel-nanamber/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/15c249dbfc6c618e0d83a08d9ad3fc395671818422d0426c14e3c200ca6d53c4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f70616d756e676b6173616e646f6e6f2f6c61726176656c2d6e616e616d6265722f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/pamungkasandono/laravel-nanamber/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/20d1cea69627f39ece018d3f828ccd15f50c2ed16d22c784cb4fb60e6703e3f1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f70616d756e676b6173616e646f6e6f2f6c61726176656c2d6e616e616d6265722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/pamungkasandono/laravel-nanamber)

Nanamber adalah library Laravel yang menyediakan cara mudah untuk menghasilkan nomor sekuensial dengan format yang dapat dikonfigurasi. Library ini menawarkan solusi untuk kasus-kasus seperti pembuatan nomor invoice, nomor referensi transaksi, kode tracking, dan lainnya yang membutuhkan nomor berurutan dengan format yang spesifik.

Fitur
-----

[](#fitur)

- Menghasilkan nomor sekuensial dengan format yang dapat dikonfigurasi
- Dukungan placeholder tanggal dalam format
- Padding yang dapat disesuaikan
- Kemampuan untuk menghasilkan nomor secara batch
- Nilai counter yang disimpan dalam database
- Reset nilai counter

Instalasi
---------

[](#instalasi)

### Persyaratan

[](#persyaratan)

- PHP 8.2+
- Laravel 8.0+

### Cara Instalasi

[](#cara-instalasi)

Anda dapat menginstal library ini via Composer:

```
composer require pamungkasandono/laravel-nanamber
```

### Publikasi Config

[](#publikasi-config)

Publikasikan file konfigurasi dengan menjalankan:

```
php artisan vendor:publish --provider="PamungkasAndono\Laravel\Nanamber\NanamberServiceProvider" --tag="config"
```

### Migrasi Database

[](#migrasi-database)

Nanamber membutuhkan tabel database untuk menyimpan counter. Jalankan migrasi untuk membuat tabel tersebut:

```
php artisan migrate --path=vendor/pamungkasandono/nanamber/database/migrations
```

Migrasi akan membuat tabel `auto_numbers` dengan struktur berikut:

```
Schema::create('auto_numbers', function (Blueprint $table) {
    $table->id();
    $table->string('template_format')->unique();
    $table->integer('last_value')->default(0);
    $table->timestamps();
});
```

Penggunaan Dasar
----------------

[](#penggunaan-dasar)

### Menghasilkan Nomor Sederhana

[](#menghasilkan-nomor-sederhana)

Contoh paling dasar menggunakan Nanamber:

```
use PamungkasAndono\Laravel\Nanamber;

// Menghasilkan nomor dengan format: 2025040001
$number = Nanamber::template('{Y}{m}{number}')->generate();
```

### Format Template

[](#format-template)

Template dapat berisi:

- `{number}` - Akan diganti dengan nomor sekuensial
- Format tanggal dalam kurung kurawal `{Y}`, `{m}`, `{d}`, dll. - Akan diganti dengan tanggal saat ini sesuai format
- Teks statis - Akan tetap ada dalam output

Contoh:

```
// Format: INV/2025/04/0001
$invoice = Nanamber::template('INV/{Y}/{m}/{number}')->generate();

// Format: DO-202504-0001
$deliveryOrder = Nanamber::template('DO-{Y}{m}-{number}')->generate();
```

### Mengatur Padding

[](#mengatur-padding)

Secara default, bagian nomor diatur dengan padding 4 digit dengan karakter '0'. Anda dapat mengubahnya:

```
// Format: INV-2025-001 (Padding 3 digit)
$invoice = Nanamber::template('INV-{Y}-{number}')
    ->pad(3)
    ->generate();

// Format: INV-2025-1*** (Padding karakter * dengan posisi right)
$invoice = Nanamber::template('INV-{Y}-{number}')
    ->pad(4, '*', STR_PAD_RIGHT)
    ->generate();
```

Penggunaan Lanjutan
-------------------

[](#penggunaan-lanjutan)

### Menggunakan Closure untuk Template yang Dinamis

[](#menggunakan-closure-untuk-template-yang-dinamis)

Anda dapat menggunakan Closure untuk membuat template yang lebih dinamis:

```
use Illuminate\Support\Str;

$buyer_id = '129';
$invoice = Nanamber::template(function ($date) use ($buyer_id) {
    return 'INV/' . $date->format('Y') . '/' . Str::padLeft($buyer_id, 4, '0') . '/{number}';
})->generate();

// Hasilnya: INV/2025/0129/0001
```

### Mengatur Tanggal Khusus

[](#mengatur-tanggal-khusus)

Secara default, Nanamber menggunakan tanggal saat ini. Anda dapat mengatur tanggal khusus:

```
use Carbon\Carbon;

// Menggunakan tanggal spesifik untuk menghasilkan nomor
$date = Carbon::create(2023, 12, 25);
$invoice = Nanamber::template('INV/{Y}/{m}/{d}/{number}')
    ->setDate($date)
    ->generate();

// Hasilnya: INV/2023/12/25/0001
```

### Menghasilkan Nomor Secara Batch

[](#menghasilkan-nomor-secara-batch)

Untuk keperluan performa, Anda dapat menghasilkan beberapa nomor sekaligus:

```
// Menghasilkan 5 nomor invoice sekaligus
$invoices = Nanamber::template('INV/{Y}/{m}/{number}')
    ->generateBatch(5);

// $invoices adalah instance Collection yang berisi 5 nomor
// ['INV/2025/04/0001', 'INV/2025/04/0002', ..., 'INV/2025/04/0005']
```

### Reset Nilai Counter

[](#reset-nilai-counter)

Untuk kasus tertentu, Anda mungkin perlu mengatur ulang nilai counter:

```
// Reset counter ke nilai 0
Nanamber::template('INV/{Y}/{number}')->resetValue();

// Reset counter ke nilai tertentu
Nanamber::template('INV/{Y}/{number}')->resetValue(999);
// Nomor selanjutnya yang dihasilkan: INV/2025/1000
```

Kasus Penggunaan
----------------

[](#kasus-penggunaan)

### Nomor Invoice dengan Reset Bulanan

[](#nomor-invoice-dengan-reset-bulanan)

Buat nomor invoice yang direset setiap bulan:

```
// Di controller Anda:
public function createInvoice()
{
    $currentMonth = now()->format('m');
    $currentYear = now()->format('Y');

    // Cek apakah sudah bulan baru
    if ($this->isNewMonth()) {
        // Reset counter untuk template bulan ini
        Nanamber::template("INV/{$currentYear}/{$currentMonth}/{number}")->resetValue(0);
    }

    // Generate nomor invoice
    $invoiceNumber = Nanamber::template("INV/{$currentYear}/{$currentMonth}/{number}")->generate();

    // Buat invoice dengan nomor yang dihasilkan
    $invoice = Invoice::create([
        'invoice_number' => $invoiceNumber,
        // ...data lainnya
    ]);

    return $invoice;
}

private function isNewMonth()
{
    // Implementasi logika untuk mendeteksi bulan baru
    // Contoh: cek apakah ada invoice di bulan ini
    return Invoice::whereMonth('created_at', now()->month)
        ->whereYear('created_at', now()->year)
        ->count() === 0;
}
```

### Nomor Referensi Departemen

[](#nomor-referensi-departemen)

Buat nomor referensi yang memiliki awalan sesuai departemen:

```
public function createReference($departmentCode)
{
    $departmentPrefixes = [
        'hr' => 'HR',
        'fin' => 'FIN',
        'ops' => 'OPS',
        'mkt' => 'MKT',
    ];

    $prefix = $departmentPrefixes[$departmentCode] ?? 'REF';

    $referenceNumber = Nanamber::template("{$prefix}-{Y}{m}-{number}")
        ->pad(5)
        ->generate();

    return $referenceNumber;

    // Contoh hasil:
    // HR-202504-00001
    // FIN-202504-00001
    // OPS-202504-00001
}
```

### Nomor Faktur dengan Cabang

[](#nomor-faktur-dengan-cabang)

Buat nomor faktur yang mencakup kode cabang:

```
public function createInvoiceNumber($branchId)
{
    $branches = [
        1 => 'JKT',
        2 => 'BDG',
        3 => 'SBY',
        4 => 'MDN',
    ];

    $branchCode = $branches[$branchId] ?? 'UNK';
    $year = now()->format('Y');
    $month = now()->format('m');

    // Template yang berbeda untuk setiap cabang
    $invoiceNumber = Nanamber::template("{$branchCode}/{$year}/{$month}/{number}")
        ->generate();

    return $invoiceNumber;

    // Contoh hasil:
    // JKT/2025/04/0001
    // BDG/2025/04/0001
    // SBY/2025/04/0001
}
```

Konfigurasi
-----------

[](#konfigurasi)

Anda dapat mengubah konfigurasi default Nanamber di file `config/nanamber.php`:

```
return [
    // Nama tabel database untuk menyimpan format template dan nilai sekuensial
    'table' => 'auto_numbers',

    // Nama kolom untuk menyimpan format template
    'field_template' => 'template_format',

    // Nama kolom untuk menyimpan nilai sekuensial terakhir
    'field_value' => 'last_value',

    // Nama kolom untuk menyimpan timestamp pembuatan
    'field_created_at' => 'created_at',

    // Nama kolom untuk menyimpan timestamp pembaruan terakhir
    'field_updated_at' => 'updated_at',
];
```

Pertimbangan Performa
---------------------

[](#pertimbangan-performa)

- Nanamber menggunakan locking database untuk mencegah race condition saat menghasilkan nomor berurutan.
- Untuk kebutuhan high-volume, gunakan `generateBatch()` untuk mengurangi jumlah transaksi database.

Kontribusi
----------

[](#kontribusi)

Kontribusi sangat diterima. Silakan membuat issue atau pull request di [GitHub repository](https://github.com/pamungkasandono/laravel-nanamber).

Lisensi
-------

[](#lisensi)

Library ini dirilis di bawah lisensi MIT.

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Credits
-------

[](#credits)

- [Pamungkas Andono](https://github.com/pamungkasandono)
- [Risna Berti](https://github.com/RisnaBerti)

License
-------

[](#license)

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

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance47

Moderate activity, may be stable

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity51

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

398d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/20d6c6f6c7e869f9b457bec44633955238999d7aa0a525d930c1594b0bceda06?d=identicon)[pamungkas](/maintainers/pamungkas)

---

Top Contributors

[![pamungkasandono](https://avatars.githubusercontent.com/u/55474559?v=4)](https://github.com/pamungkasandono "pamungkasandono (14 commits)")

---

Tags

laravelpamungkas andononanamber

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/pamungkasandono-laravel-nanamber/health.svg)

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

###  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)
