I don’t know if I got this right, but your serial prefix, is it a fixed text that you’re going to choose for yourself? If it is you can make a very simple change to your code, which is to take all the letters from the array, and decrease the count from 20 to 15 digits, and put your prefix text manually, thus:
$chars = array(0,1,2,3,4,5,6,7,8,9);
$serial = '';
$max = count($chars)-1;
for($i=0;$i<15;$i++){
$serial .= (!($i % 5) && $i ? '-' : '').$chars[rand(0, $max)];
}
echo 'XYAMN-'.$serial;
Now if you want the prefix to be random letters, you can separate in 2 array, one for numbers and one for letters, and create 2 for
. But I suggested a simplified form without arrays using the function chr
php, thus:
for($i=0; $i<5; $i++){
$prefixo .= strtoupper(chr(rand(97, 122))); //97 é o codigo ascii para 'a' e 122 para z
}
for($i=0; $i<15; $i++){
$serial .= (!($i % 5) && $i ? '-' : '').rand(0, 9);
}
echo $prefixo.'-'.$serial;
And if you create functions and classes to make your serial generator much more dynamic. Such as making a modifier for the digit separator, using a single for both situations, and etc. For example:
function Serial($tipo = '', $qtdigitos = 5, $qtdbaterias = 4, $separador = '-') {
$qtdtotal = $qtdbaterias * $qtdigitos;
$letrasnumeros = array_merge(range(0,9), range('A', 'Z')); // Cria um array de letras e numeros de forma simplificada
for($i=0; $i < $qtdtotal; $i++){
if ($tipo == 'numeros') { $digito = rand(0, 9); }
else if($tipo == 'letras') { $digito = chr(rand(65, 90)); } //65 é o codigo ascii para 'A' e 90 para 'Z'
else { $digito = $letrasnumeros[rand(0, count($letrasnumeros) - 1)]; }
$serial .= (!($i % $qtdigitos) && $i ? $separador : '').$digito;
}
return $serial;
}
And then you can use the function in various ways:
// Retorna serial com letras e numeros,
// Ex: RQ4BD-1NSBA-PXUD9-DOKS6
echo Serial();
// Retorna serial só com números,
// Ex: 07295-31860-33824-63832
echo Serial('numeros');
// Retorna serial só com letras,
// Ex: CDMIC-AXLET-BRMGW-QUVWL
echo Serial('letras');
// Retorna serial só com números mas quantidade diferente de caracteres,
// Ex: 339-671-633-081-731-120
echo Serial('numeros', 3, 6);
// Utilizar separadores diferentes,
// Ex: 2CQHJ.SF1E6.D5SOG.UA10K
echo Serial('aleatorio', 5, 4, '.');
// Juntar formas e quantidades diferentes,
// Ex: AMQGUUY-82468-32482-84190
echo Serial('letras', 7, 1).'-'.Serial('numeros', 5, 3);
// Juntar texto fixo com serial
// Ex: XYAMN-16697-17479-56095
echo 'XYAMN-'.Serial('numeros', 5, 3);
I hope I’ve helped