Solución:
Gracias a Gordon Linoff, pude encontrar una manera de resolver esto.
Compartiré un ejemplo, quizás a alguien le pueda interesar.
SQL – Factura sin prefijo: SELECT id, LPAD(id,7,'0') FROM invoice WHERE id = 1;
Resultado: 0000001
SQL – Factura con prefijo: SELECT id, CONCAT( 'F-', LPAD(id,7,'0') ) FROM invoice;
Resultado: F-0000001
Puede escribir una buena función auxiliar en PHP para usarla donde quiera en su aplicación para devolver un número de factura. La siguiente función auxiliar puede simplificar su proceso.
function invoice_num ($input, $pad_len = 7, $prefix = null) {
if ($pad_len <= strlen($input))
trigger_error('<strong>$pad_len</strong> cannot be less than or equal to the length of <strong>$input</strong> to generate invoice number', E_USER_ERROR);
if (is_string($prefix))
return sprintf("%s%s", $prefix, str_pad($input, $pad_len, "0", STR_PAD_LEFT));
return str_pad($input, $pad_len, "0", STR_PAD_LEFT);
}
// Returns input with 7 zeros padded on the left
echo invoice_num(1); // Output: 0000001
// Returns input with 10 zeros padded
echo invoice_num(1, 10); // Output: 0000000001
// Returns input with prefixed F- along with 7 zeros padded
echo invoice_num(1, 7, "F-"); // Output: F-0000001
// Returns input with prefixed F- along with 10 zeros padded
echo invoice_num(1, 10, "F-"); // Output: F-0000000001
Una vez que haya terminado de escribir la función auxiliar, no necesita usar LPAD
o CONCAT
MySQL funciona cada vez en su consulta para devolver la ID con ceros o ceros con prefijo. Si tiene acceso global a la función de ayuda en toda la aplicación, solo necesita invocarla donde desee generar un número de factura.
Obtenga el último ID de la base de datos y guárdelo en una variable PHP.
Por ejemplo, si el último registro es 100
, luego increméntelo en 1
.
$last = 100; // This is fetched from database
$last++;
$invoice_number = sprintf('%07d', $last);
Finalmente, la respuesta a la segunda pregunta es,
$number = "F-". $number;