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$cadena = 'ABCD 123456-7';
$letras = array(0 => 0, /* ......... */ 'Z' => 38); $posicion = 1; // Cada vez se multiplicara por dos
$suma = 0; // Aquí guardarás el total
for($i = 0; $i < strlen($cadena); $i++) { $caracter = $cadena[$i];
$suma += ($posicion * $letras[$caracter]);
$posicion = $posicion * 2;
}
// Al final, ya tendrás la suma
// Sólo continúas con los pasos 6 al 8 y voilà!