Foros del Web » Programando para Internet » PHP »

Limpiar php para obtener digito verificador, codigo de barras EAN

Estas en el tema de Limpiar php para obtener digito verificador, codigo de barras EAN en el foro de PHP en Foros del Web. Pues eso que dice el titulo, quiero limpiar una pequeñisima aplicacion, ya que no me gusta como esta y no se me ocurre como, esta ...
  #1 (permalink)  
Antiguo 22/04/2009, 16:47
Avatar de yeudiel  
Fecha de Ingreso: abril-2008
Ubicación: Ciudad de México
Mensajes: 78
Antigüedad: 16 años
Puntos: 1
Limpiar php para obtener digito verificador, codigo de barras EAN

Pues eso que dice el titulo, quiero limpiar una pequeñisima aplicacion, ya que no me gusta como esta y no se me ocurre como, esta trabaja 100% pero quisiera limpiarla explico en que consiste.

La aplicacion se encarga de calcular el digito de verificacion de los codigo de barras EAN (12 digitos mas el digito verificador) y para ello se tienen que hacer las siguientes operaciones.

Tomamos por ejemplo el codigo de mi chocolate para beber favorito 750105922532-9 <- el 9 es el numero que se debe obtener.

1.- Paso tomamos la cadena 750105922532 y la invertimos (235229501057).
2.- Sumo los numeros en los lugares impares de la cadena 2+5+2+5+1+5=20 y el resultado lo multiplico por 3, 20 *3 = 60.
3.- Sumo los numeros en los lugares PARES de la cadena 3+2+9+0+0+7=21.
4.- Sumo el resultado del paso 2 y el paso 3 y me da 81, ahora calculo la decena inmediata superior, en este caso es 90 y a esto le resto 81, 90-81=9;

Y asi obtengo el digito verificador 9. Un poco liado pero segun se ese es el protocolo, xd.

Ahora el codigo php que use

Código PHP:
$codigo="750105922532";//codigo de mi pocholate jeje
$codigo2=strrev($codigo);//invierto el codigo
$numero1=substr($codigo2,0,1);//obtengo el primer digito
$numero2=substr($codigo2,1,1);//obtengo el segundo digito
$numero3=substr($codigo2,2,1);//shalala shalala...
$numero4=substr($codigo2,3,1);
$numero5=substr($codigo2,4,1);
$numero6=substr($codigo2,5,1);
$numero7=substr($codigo2,6,1);
$numero8=substr($codigo2,7,1);
$numero9=substr($codigo2,8,1);
$numero10=substr($codigo2,9,1);
$numero11=substr($codigo2,10,1);
$numero12=substr($codigo2,11,1);
//sumo los numeros en lugares impares y los multiplico por 3
$sub1=($numero1+$numero3+$numero5+$numero7+$numero9+$numero11)*3;
//sumo los numeros en lugares pares
$sub2=$numero2+$numero4+$numero6+$numero8+$numero10+$numero12;

$total=$sub1+$sub2;//sumo los resultados de los numeros pares e impares
$sep2=substr($total,1,1);//obtengo el segundo digito del total
if(!$sep3=substr($total,2,1)){//si el numero es de 2 cifras hace lo de abajo
if($sep2<=4){//si el numero es menor a 5 lo convierto en 6 para poder redondear hacia arriba
$sep2=6;
}
}else{
if(
$sep3<=4){//si el numero es de 3 cifras y es menor de 5 lo convierto en 6 para redondear hacia arriba
$sep3=6;
}
}
$total_tmp=$sep.$sep2.$sep3;//obtengo un total temporal esto lo hago porque
//siempre se debe redondear a la decena superior aunque el numero sea 3 se
//debe redondear a 10
$total2=round($total_tmp, -1);//redondeo el total temporal a la decena superior
$gran_total=$total2-$total;//resto el total de la decena superior que es $total2
echo " el digito verificador de $codigo es $gran_total"
Si se les ocurre como limpiarlo no duden en responder, tambien considerenlo un aporte para los codigos de barras EAN, jeje. Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 22/04/2009, 16:50
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Limpiar php para obtener digito verificador, codigo de barras EAN

Código:
<?php
function ean($cadena)
{
	$cadena = strrev($cadena);
	$i = 0;
	while($i < strlen($cadena))
	{
	 if($i%2 == 0) $impares += $cadena[$i];
	 else $pares += $cadena[$i];
	$i++;
}
$suma = $pares + ($impares*3); 
return 10 -($suma%10);
}

// Prueba

echo ean("750105922532"); // devuelve 9
?>
Lo unico asi que veo es que haces 10 - la suma en mod 10, y te da el codigo directamente
Un saludo

Última edición por f0n; 22/04/2009 a las 17:41
  #3 (permalink)  
Antiguo 22/04/2009, 17:37
Avatar de yeudiel  
Fecha de Ingreso: abril-2008
Ubicación: Ciudad de México
Mensajes: 78
Antigüedad: 16 años
Puntos: 1
Respuesta: Limpiar php para obtener digito verificador, codigo de barras EAN

No pues no me funciona, pero voy a tratar de checar haber si puedo solucionarlo, hice lo mismo que tu pero me sale 90
  #4 (permalink)  
Antiguo 22/04/2009, 17:39
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Limpiar php para obtener digito verificador, codigo de barras EAN

envie 2 codigos casi simultaneos, al primero se me olvido una tonteria... pero el segundo estaba bien.. comprueba que no hayas probado el primero
  #5 (permalink)  
Antiguo 22/04/2009, 17:57
Avatar de yeudiel  
Fecha de Ingreso: abril-2008
Ubicación: Ciudad de México
Mensajes: 78
Antigüedad: 16 años
Puntos: 1
Respuesta: Limpiar php para obtener digito verificador, codigo de barras EAN

Me funciona Wow, estuvo genial, muchas gracias, aca el link pa que veas como funciona de genial www.goldshop.com.mx/bar tu funcion es la que se muestra abajo del codigo de barras y abajo del codigo (numero) esta solito.
  #6 (permalink)  
Antiguo 22/04/2009, 18:03
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Limpiar php para obtener digito verificador, codigo de barras EAN

Está muy bien. Algunas cosas que podrías hacer aunque sea con javascript mismo es comprobar que el campo tenga 12 caracteres para que no se obtenga una imagen erronea.

Hace poco estuve haciendo un trabajo sobre codigos de barras y encontre esto que te puede interesar:

zxing.org/w/decode.jspx

Un saludo
  #7 (permalink)  
Antiguo 22/04/2009, 18:13
Avatar de yeudiel  
Fecha de Ingreso: abril-2008
Ubicación: Ciudad de México
Mensajes: 78
Antigüedad: 16 años
Puntos: 1
Se lee bastante interesante, sobre todo el poder leer codigos de 2 dimensiones, seguire investigando y gracias por tu ayuda

Tu funcion tiene un error (por omision) el numero verificador debe ser solo de un digito entonces si el digito es igual a 0 me da 10, pero como es en el unico caso que da error lo solucione con un

if($resultado==10){$resultado=0;}

Última edición por GatorV; 22/04/2009 a las 21:07
  #8 (permalink)  
Antiguo 03/03/2010, 19:01
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 22 años, 3 meses
Puntos: 2
Respuesta: Limpiar php para obtener digito verificador, codigo de barras EAN

Hola a todos.
Disculpen la molestia, busca exactamente estp, pero en JAVA, alguien lo vio por ahí?

Juro que estoy buscando y no la encuentro

Saludos y gracias de antemano
__________________
La Perfección es enemigo de lo bueno.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:30.