Foros del Web » Programando para Internet » PHP »

Consulta operaciones con String

Estas en el tema de Consulta operaciones con String en el foro de PHP en Foros del Web. Hola a todos!!! Necesito si pueden ayudarme con lo siguiente. Tengo que guardar en una base de datos mysql un numero de contenedor. Los numeros ...
  #1 (permalink)  
Antiguo 08/10/2012, 15:55
 
Fecha de Ingreso: mayo-2011
Mensajes: 78
Antigüedad: 12 años, 11 meses
Puntos: 0
Consulta operaciones con String

Hola a todos!!! Necesito si pueden ayudarme con lo siguiente. Tengo que guardar en una base de datos mysql un numero de contenedor. Los numeros de contenedores estan compuestos de 4 letras, 6 numeros y un verificador. Por ejemplo SUDU 123456-7 . Tengo la formula que utilizan para generar ese verificador, lo que necesito es poder realizar operaciones algebraicas con cada caracter del numero de contenedor y si la suma de los caracteres coincide con el verificador guardarlo en la base de datos y sino mostrar un mensaje de error y no guardarlo.

Podran ayudarme??? Muchas gracias!!!
  #2 (permalink)  
Antiguo 08/10/2012, 16:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Consulta operaciones con String

Cita:
Iniciado por lisil1986
Podran ayudarme??? Muchas gracias!!!
No!

Digo, al menos necesitamos conocer la fórmula para sugerite como aplicarla.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 08/10/2012, 17:59
 
Fecha de Ingreso: mayo-2011
Mensajes: 78
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Consulta operaciones con String

Cita:
Iniciado por Triby Ver Mensaje
No!

Digo, al menos necesitamos conocer la fórmula para sugerite como aplicarla.
Bueno igual ya es un avance que me hayas querido ayudar!!

aca te paso una pagina donde lo explican claramente. gracias!!!!

http://www.todologistica.com/online/site/55878I1.php
  #4 (permalink)  
Antiguo 09/10/2012, 06:11
Avatar de kreil  
Fecha de Ingreso: septiembre-2012
Ubicación: España
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 16
Respuesta: Consulta operaciones con String

Tendrás que hacer una división de ese string en principio, sería con la función

Código PHP:

$cadena_dividida
=str_split($cadena); 
Con esa función si tienes el array SUDU 123456-7
te quedarían:

S
U
D
U

1
2
3
4
5
6
-
7

Así que si quieres por ejemplo acceder al número 1 tendrías que escribir $cadena_dividida[6];

Lo de mostrar luego mensajes de error y tal pues ya sabes, un if y listo.
__________________
Diseñador y programador de El break; de la informática
  #5 (permalink)  
Antiguo 09/10/2012, 11:22
 
Fecha de Ingreso: mayo-2011
Mensajes: 78
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Consulta operaciones con String

Muchas gracias!! mas tarde lo pruebo y si funciona lo publico por si alguien quiere usarlo en el futuro. Saludos!!
  #6 (permalink)  
Antiguo 09/10/2012, 13:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Consulta operaciones con String

De hecho, puedes recorrer una cadena caracter por caracter sin dividirla:

1- Primero verifica que la longitud de la cadena sea adecuada con strlen(), si es necesario, elimina espacios y guiones con str_replace()
2- Los primeros 4 caracteres sean alfabéticos, con substr() y ctype_alpha()
3- Los últimos 7 caracteres deben ser numéricos, con substr() e is_numeric()
4- Crea un array donde contengas todos los caracteres con su respectivo valor:
0=0, 1=1... 9=9, A=10... Z=38

Código PHP:
Ver original
  1. $cadena = 'ABCD 123456-7';
  2. $letras = array(0 => 0, /* ......... */ 'Z' => 38);
  3. $posicion = 1; // Cada vez se multiplicara por dos
  4. $suma = 0; // Aquí guardarás el total
  5.  
  6. for($i = 0; $i < strlen($cadena); $i++) {
  7.     $caracter = $cadena[$i];
  8.     $suma += ($posicion * $letras[$caracter]);
  9.     $posicion = $posicion * 2;
  10. }
  11. // Al final, ya tendrás la suma
  12. // Sólo continúas con los pasos 6 al 8 y voilà!
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 10/10/2012, 22:24
 
Fecha de Ingreso: mayo-2011
Mensajes: 78
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Consulta operaciones con String - Comprobar numero de contenedor

Muchas gracias por la ayuda!! funciona a la perfeccion.

Pego el codigo por si alguien lo quiere usar. Saludos!!

Código PHP:
<?php
    
    $cadena 
'SUDU 790993-1';
    
$cadenamayuscula strtoupper ($cadena);
    
$cadena1 str_replace('-'''$cadenamayuscula); // quita el -
    
$cadena1b str_replace(' '''$cadena1);// quita el espacio en blanco
    
$cadena2 substr($cadena1b,0,10); // corta la cadena a 10 digitos para no multiplicar el digito verificador
    
$ultimodigito substr($cadena,12,1);
   
    if (
strlen ($cadena2) == 10) {
        
$letracont substr($cadena2,0,4);//extrae las letras
        
$digitos substr($cadena2,4,7);//extrae los numeros
        
if (ctype_alpha($letracont) && is_numeric($digitos)){ // verifica que realmente sean letras y numeros
    
            
$letras = array(=> 0=> 1=> 2=> 3=> 4=> 5=> 6=> 7=> 8=> 9'A' => 10'B' => 12'C' => 13'D' => 14'E' => 15'F' => 16'G' => 17'H' => 18'I' => 19'J' => 20'K' => 21'L' => 23'M' => 24'N' => 25'O' => 26'P' => 27'Q' => 28'R' => 29'S' => 30'T' => 31'U' => 32'V' => 34'W' => 35'X' => 36'Y' => 37'Z' => 38);
            
$posicion 1// Cada vez se multiplicara por dos
            
$suma 0// Aquí guardarás el total
     
                
for($i 0$i strlen($cadena2); $i++) {
                 
$caracter $cadena2[$i];
                    
$suma += ($posicion $letras[$caracter]);
                    
$posicion $posicion 2;
        
    }
        
$division $suma/11// divide suma de caracteres por 11
        
$redondeado floor ($division); // trunca el resultado de la division
        
$multiplicacion $redondeado 11// multiplica el resultado truncado por 11
        
$verificador $suma $multiplicacion// resta la suma original menos el numero truncado * 11. Este numero es el ultimo digito del nro de contenedor
            
            
}
    }
    
            if (
$verificador == $ultimodigito){ // verifica que el ultimod digito del nro de contenedor sea igual al resultado de la comprobacion
               
echo "El numero de contenedor es correcto";
            }else{
                echo 
"El numero de contenedor es inexistete";
            }
    
    
?>

Etiquetas: mysql, operaciones, string
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 12:54.