25 lines
669 B
PHP
25 lines
669 B
PHP
<?php
|
|||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace App\Domain\Jobcard;
|
||
|
|
|
||
|
|
final class JobcardReference
|
||
|
|
{
|
||
|
|
public static function generate(int $sequence, ?int $year = null): string
|
||
|
|
{
|
||
|
|
if ($sequence < 1) {
|
||
|
|
throw new \InvalidArgumentException('Sequence must be positive.');
|
||
|
|
}
|
||
|
|
$year ??= (int) date('Y');
|
||
|
|
if ($year < 2000 || $year > 9999) {
|
||
|
|
throw new \InvalidArgumentException('Year must be four digits.');
|
||
|
|
}
|
||
|
|
return sprintf('JC-%04d-%06d', $year, $sequence);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static function isValid(string $reference): bool
|
||
|
|
{
|
||
|
|
return preg_match('/^JC-\d{4}-\d{6}$/', $reference) === 1;
|
||
|
|
}
|
||
|
|
}
|