cómo puedo convertir una cadena (es decir, una dirección de correo electrónico) en enteros únicos, para usarlos como ID.Cómo convertir una cadena a un INTEGER único en php
Respuesta
La cantidad de información que un entero de PHP puede almacenar es limitada. La cantidad de información que puede almacenar en una cadena no es (al menos si la cadena no es irracionalmente larga)
Por lo tanto, necesitaría comprimir la cadena de longitud arbitraria en un entero de longitud no arbitraria. Esto es imposible sin pérdida de datos.
Puede usar un algoritmo hash, pero los algoritmos hashing siempre pueden tener colisiones. Especialmente si quiere unir una cadena a un número entero, la probabilidad de colisión es bastante alta: los enteros pueden almacenar muy pocos datos.
Por lo tanto, deberá seguir con el correo electrónico o usar un campo entero de incremento automático.
puede explicar mejor su respuesta, especialmente el último párrafo y gracias – jspeshu
buen razonamiento, debo decir, pero ¿puedo @ al menos encontrar una función que hará esto, p. tengo un campo, es decir, un correo electrónico que es VARCHAR (40) y dado que estos campos son únicos para todos los valores en lugar de usar un hash para evitar la colusión, agregaré un valor digamos XXXX para que su longitud == 40 siga siendo única, entonces ¿cómo puedo tener un int único de este – jspeshu
bien. Todavía no creo que encuentres esa función: una cadena de 40 caracteres puede almacenarse en 40 bytes (si es ascii, unicode tomará * incluso más *). Un entero, por otro lado, solo tiene 8 bytes (y eso solo en una máquina de 64 bits). Por lo tanto, todavía tendría que almacenar 40 bytes en 8 bytes ... – NikiC
Pruebe la función binhex
desde el sitio anterior:
<?php
$str = "Hello world!";
echo bin2hex($str) . "<br />";
echo pack("H*",bin2hex($str)) . "<br />";
?>
salidas
48656c6c6f20776f726c6421
Hello world!
puede generar un int único ahora es ver que "48656c6c6f20776f726c6421" un hexágono o menos – jspeshu
depende de lo grande del int es sin embargo - que tiene un valor int 5216694956355254127 –
¿Por qué no tener un campo de ID de incremento automático en la base de datos?
no tengo i db Estoy leyendo los datos del servidor LDAP y el único campo único es su dirección de correo electrónico – jspeshu
+1 que es el enfoque correcto. sin magia de cuerdas – NikiC
Realmente no necesita una base de datos para este enfoque, supongo que podría tener un incremento de archivo de texto para cada categoría de incrementos de nombre de archivo. – Vass
Si los correos electrónicos son en texto original, puede usar PHP ord function para generar un número entero único, ¡pero será un número muy grande!
El enfoque sería trabajar a través de la dirección de correo electrónico un carácter a la vez, llamando ord para cada uno de ellos. La función ord devuelve un entero expresando de manera única el valor del personaje. Puede rellenar cada uno de estos números con ceros y luego usar la concatenación de cadenas para conectarlos entre sí.
Considera la posibilidad de "abc".
ord("a");
>> 97
ord("b");
>> 98
ord("c");
>> 99
cojín de estos números con un 0, y que tienen un número único para él, es decir: 970980990
.
Espero que ayude!
¿qué hay de la limitación de longitud, por ejemplo,? ¿Qué tal este correo electrónico "[email protected]" hay un int int para esto? No creo que así b/se php tiene una constante llamada PHP_MAX_INT o algo así. – jspeshu
Sí, ese será el problema a superar. Como todos dicen, esta no es la manera correcta de hacerlo, solo quería resaltar un enfoque en caso de que eso ayude. – adamnfish
¿Por qué no crear su propia tabla asociativa localmente que enlazará los correos electrónicos con enteros únicos?
lo tanto, el flujo de trabajo estaría en la línea de:
1 get the record from the ldap server.
2 check it locally if it has already an int assigned.
2.1 if yes use that int.
2.2 if no, generate an associative row in the table locally.
3 do your things with the unique ids.
¿Tiene esto sentido?
lo siento pero no entendí que ... – jspeshu
La única manera en que puede mantener una asociación entre sus correos electrónicos y una lista de enteros es tener una capa persistente (una base de datos, por ejemplo) que funcionará como un correlacionador entre sus correos electrónicos y los números. Así que cree su tabla o archivo de base de datos localmente y almacene los datos de esa manera: [email protected] = 1001, [email protected] = 1002, etc. – Slavic
eso es lo que quiero evitar y ¿qué me lleva a esta pregunta? pero gracias, creo que este chico @nikic lo entendió – jspeshu
Se puede utilizar esta función:
function stringToInteger($string) {
$output = '';
for ($i = 0; $i < strlen($string); $i++) {
$output .= (string) ord($string[$i]);
}
return (int) $output;
}
un poco feo, pero funciona :)
Este código genera el número de 64 bits que se puede utilizar, ya que o como Bigint/parecidos de tipo de datos para bases de datos como MySQL, etc.
function get64BitNumber($str)
{
return gmp_strval(gmp_init(substr(md5($str), 0, 16), 16), 10);
}
echo get64BitNumber('Hello World!'); // 17079728445181560374
echo get64BitNumber('Hello World#'); // 2208921763183434891
echo get64BitNumber('http://waqaralamgir.tk/'); // 12007604953204508983
echo get64BitNumber('12345678910'); // 4841164765122470932
- 1. PHP: ¿Cómo convertir 0777 (un octal) a una cadena?
- 2. ¿Cómo convertir una matriz a una cadena en PHP?
- 3. Convertir BigDecimal en Integer
- 4. Convertir un entero grande a una cadena completa en PHP
- 5. PHP convertir cadena a matriz
- 6. cómo convertir el vector <Integer> a un int []?
- 7. Cómo convertir un HTMLElement a una cadena
- 8. Convertir cadena a tiempo en php
- 9. Cómo convertir un int a una cadena?
- 10. cómo convertir objeto en cadena en PHP
- 11. Cómo convertir una cadena utf-8 a una cadena utf-16 en PHP
- 12. Cómo convertir (transcribir) una cadena de utf8 a ASCII (byte único) en C#?
- 13. cómo convertir una cadena en un bool
- 14. cómo convertir un entero a una cadena en gnuplot?
- 15. Cómo convertir una cadena a un objeto XML en JavaScript?
- 16. ¿Cómo convertir un entero a una matriz en PHP?
- 17. convertir una cadena a un corto
- 18. Convertir una cadena a un constructor de tipos en Haskell
- 19. Cómo convertir una cadena a NSData
- 20. Cómo convertir JSON a una cadena?
- 21. perl cómo convertir una cadena a Datetime?
- 22. Convertir una cadena a variable
- 23. Convertir una cadena que contiene un número en notación científica a un doble en PHP
- 24. Cómo convertir una cadena a android.net.Uri
- 25. ¿Cómo convertir una cadena de valores hexadecimales a una cadena?
- 26. convertir una cadena a Stream
- 27. Cómo convertir una cadena a UTF8?
- 28. ¿Cómo convertir una cadena a su representación Base-10?
- 29. convertir un flotador a cadena en F #?
- 30. Cómo convertir una cadena a una fecha en sybase
voto como no verdadera pregunta – Svisstack