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?
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:
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.