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).
- 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).
- Demo (Symfony 7 & 8) – run
make -C demo up-symfony8from the bundle root.
// 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" #}- PHP 8.1+
- Symfony 6.0 | 7.0 | 8.0
- Twig 3.8+ or 4.x
MIT. See LICENSE.