Algoritmo Base 10 para Dígito Verificador oxxo PHP
Hola qué tal, hoy compartiré un pequeño pedazo de código que tal vez pueda ayudar a alguien por ahí.
En el trabajo solicitaron crear un código de barras para cobros por oxxo, para obtener dicho código de barras es necesario crear una cadena de números (29 digitos en este caso).
Supongamos que el número es el siguiente:
191210475750261871150649310
el algoritmo nos dice lo siguiente:
$splitCodigo = str_split('191210475750261871150649310');
$bandera = true;
$suma = 0;
$splitCodigo = array_reverse($splitCodigo);
foreach ($splitCodigo as $value) {
$x=0;
switch ($bandera) {
case true:
$z = 0;
$x = $value * 2;
$x = str_split($x);
foreach ($x as $y) {
$z = $z + $y;
}
$bandera = false;
break;
case false:
$z = 0;
$x = $value * 1;
$x=str_split($x);
foreach ($x as $y) {
$z = $z + $y;
}
$bandera = true;
break;
}
$suma = $suma + $z;
}
$res = ($suma % 10);
if($res == 0){
$codigoFinal = 0;
$cadenaFinal = ''.$codigo.$codigoFinal.'';
}
if($res != 0){
$codigoFinal = 10 - $res;
$cadenaFinal = ''.$codigo.$codigoFinal.'';
}
echo $cadenaFinal;
}
quizá haya mil formas más eficientes de generar el código y la cadena, si tienes una mejor idea hazmela saber.
Saludos!! y feliz año nuevo 2018
happy coding!
En el trabajo solicitaron crear un código de barras para cobros por oxxo, para obtener dicho código de barras es necesario crear una cadena de números (29 digitos en este caso).
Supongamos que el número es el siguiente:
191210475750261871150649310
el algoritmo nos dice lo siguiente:
- Empezando de atrás para adelante se multiplica el primer número del código por 2, el siguiente por 1, el siguiente por 2, el siguiente por 1 y así sucesivamente.
- Se suman los resultados (los números de 2 cifras se separan y se suman)
- Se divide el resultado de la suma entre 10 y se obtiene el residuo.
- Si el resido es igual a cero el dígito es cero. Si el residuo es diferente de cero el dígito es el resultado de restarle a 10 el residuo.
$splitCodigo = str_split('191210475750261871150649310');
$bandera = true;
$suma = 0;
$splitCodigo = array_reverse($splitCodigo);
foreach ($splitCodigo as $value) {
$x=0;
switch ($bandera) {
case true:
$z = 0;
$x = $value * 2;
$x = str_split($x);
foreach ($x as $y) {
$z = $z + $y;
}
$bandera = false;
break;
case false:
$z = 0;
$x = $value * 1;
$x=str_split($x);
foreach ($x as $y) {
$z = $z + $y;
}
$bandera = true;
break;
}
$suma = $suma + $z;
}
$res = ($suma % 10);
if($res == 0){
$codigoFinal = 0;
$cadenaFinal = ''.$codigo.$codigoFinal.'';
}
if($res != 0){
$codigoFinal = 10 - $res;
$cadenaFinal = ''.$codigo.$codigoFinal.'';
}
echo $cadenaFinal;
}
quizá haya mil formas más eficientes de generar el código y la cadena, si tienes una mejor idea hazmela saber.
Saludos!! y feliz año nuevo 2018
happy coding!