nowo-tech / serial-number-bundle
Generate and mask serial numbers for invoices, receipts, etc. Pattern-based with context and Twig filter.
Package info
github.com/nowo-tech/SerialNumberBundle
Type:symfony-bundle
pkg:composer/nowo-tech/serial-number-bundle
v1.0.2
2026-03-13 12:58 UTC
Requires
- php: >=8.1 <8.6
- symfony/config: ^6.0 || ^7.0 || ^8.0
- symfony/dependency-injection: ^6.0 || ^7.0 || ^8.0
- symfony/http-kernel: ^6.0 || ^7.0 || ^8.0
- twig/twig: ^3.8 || ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.0
- symfony/yaml: ^6.0 || ^7.0 || ^8.0
Suggests
- symfony/flex: For automatic recipe installation
README
Symfony bundle to generate and mask serial numbers for invoices, receipts, tickets, etc. Uses a pattern with placeholders ({year}, {prefix}, {id}), a context map, and an optional numeric id padding. Includes a Twig filter to mask the serial for display (e.g. show only last 4 digits).
Features
- SerialNumberGenerator service: build serials from
context(variables),pattern(string with{var}and{id}), and numericid(optional zero-padding). - Twig function
serial_number(context, pattern, id, padding?): generate serial in templates. - Twig filter
serial_number_mask(serial, visibleLast?, maskChar?): mask a serial leaving only the last N characters visible (e.g.***************0042).
Documentation
Demos
- Demo (Symfony 7 & 8) – run
make -C demo up-symfony8from the bundle root.
Quick example
// In a controller or service $serial = $this->serialNumberGenerator->generate( ['prefix' => 'FAC', 'year' => 2025, 'office' => '01'], '{prefix}-{year}-{office}-{id}', 42, 5 // id padding → 00042 ); // → "FAC-2025-01-00042"
{# Generate and mask in Twig #} {{ serial_number( { prefix: 'FAC', year: 2025, office: '01' }, '{prefix}-{year}-{office}-{id}', invoice.id, 5 )|serial_number_mask(4) }} {# → "***************00042" #}
Requirements
- PHP 8.1+
- Symfony 6.0 | 7.0 | 8.0
- Twig 3.8+ or 4.x
License
MIT. See LICENSE.