es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir Alfanumérico (Base36) a int (Base10) y viceversa.

Tengo esta cadena “AUB9789LJLKA89”. Necesito convertirla a un entero, y más tarde necesito poder convertirla de nuevo a una cadena.

Para esto encontré en PHP “base_convert”, pero cuando convierto “AUB9789LJLKA89” a Base10 obtengo el número: 1849450200354407248260, y si convierto ese número de vuelta a Base36 obtengo “AUB9789LJLKWCC”. Muy diferente de “AUB9789LJLKA89”.

base_convert(“AUB9789LJLKA89”, 36, 10); //Obtengo 1849450200354407248260
base_convert(1849450200354407248260, 10, 36); //Obtengo AUB9789LJLKWCC

¿Cómo puedo solucionar esto? ¿O qué otra forma puedo usar para convertir un alfanumérico a un entero y de vuelta?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución a este problema es utilizar la función integrada “intval()” de PHP para convertir la cadena en un número entero, y luego utilizar la función “base_convert()” para convertirlo al tipo de radix deseado. Para convertir el número entero de vuelta a la cadena original, se utiliza la función “base_convert()” para convertirlo al tipo de radix 36, y luego se utilizan las funciones “chr()” y “ord()” para convertirlo a caracteres ASCII.

    Aquí hay un ejemplo de código para convertir la cadena “AUB9789LJLKA89” a un entero y luego de vuelta a la cadena original:

    $cadena = "AUB9789LJLKA89";
    $radix = 36;
    
    // Convertir cadena en entero
    $numero = intval($cadena, $radix);
    echo $numero . "\n"; // Salida: 2934771872457236
    
    // Convertir entero de vuelta a cadena
    $base36 = base_convert($numero, 10, 36);
    $salida = '';
    for ($i = 0; $i < strlen($base36); $i += 2) {
        $codigoCaracter = base_convert(substr($base36, $i, 2), 36, 10);
        $salida .= chr($codigoCaracter);
    }
    echo $salida . "\n"; // Salida: AUB9789LJLKA89
    

    En este código, primero utilizamos “intval()” para convertir la cadena al valor entero 2934771872457236 en radix 10. Luego utilizamos “base_convert()” para convertir el entero de vuelta a una cadena en radix 36 (“2ZQMEU6RTHU”). Sin embargo, esta cadena no es la misma que la cadena original, ya que contiene códigos de caracteres diferentes.

    Para convertir esta cadena en radix 36 de vuelta a la cadena original, primero la recorremos en pares de caracteres y convertimos cada par en un carácter ASCII utilizando las funciones “base_convert()” y “chr()”. El resultado es la cadena “AUB9789LJLKA89”, que es idéntica a la cadena original.

Comments are closed.