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 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 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";
}
?>