Files
xstore/inc/Hura8/System/IDGenerator.php

57 lines
1.5 KiB
PHP
Raw Permalink Normal View History

2025-10-04 11:46:59 +07:00
<?php
namespace Hura8\System;
use Hidehalo\Nanoid\Client;
class IDGenerator
{
/**
* @param string $prefix - S = sale-order, P = purchase-order
* @param int $increment_id result of IncrementIDModel/getId
* @param int $length max length for the result-id, if length=6, prefix=P, $increment_id=20 => final id = P000020
* @return string
*/
public static function createItemId(string $prefix, int $increment_id, $length = 6): string
{
$num_zeros = $length - strlen($increment_id);
if($num_zeros > 0) {
return join("", [$prefix, str_repeat("0", $num_zeros), $increment_id]);
}
return join("", [$prefix, $increment_id]);
}
private static $nanoClientCache;
/**
* @description create string id using Nano ID
* Collision Calculator: https://zelark.github.io/nano-id-cc/
* @param int $length
* @param bool $lower_case
* @return string
*/
public static function createStringId(int $length = 15, bool $lower_case = false) : string {
if($lower_case) {
$alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
} else {
$alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
}
if(isset(static::$nanoClientCache)) {
return static::$nanoClientCache->formattedId($alphabet, $length);
}
// create one
$client = new Client();
static::$nanoClientCache = $client;
return $client->formattedId($alphabet, $length);
}
}