VCL Varnish randomint_seeded and std.strtol in PHP or Javascript
Para fines de prueba de AB generamos un hash unqiue de un usuario Id en un valor de cubo en VCL (por rápidamente CDN).
set var.backResult =
randomint_seeded(1, 4,
std.strtol(
substr(
digest.hash_md5(req.http.X-Development-UserId)
, 0, 8),
16)
);
Esto comienza por hackear el usuario id a una cadena MD5. Luego los primeros 8 chars. se utilizan en el std.strtol
funciona lo que lo convierte en un valor entero. Ese valor se utiliza entonces como semilla randomint_seeded
función.
Estamos luchando haciendo las mismas funciones que std.strtol
y randomint_seeded
en cualquier otro idioma (que busca PHP o javascript). Necesitamos tener el mismo resultado en diferentes idiomas.
¿Alguna sugerencia sobre esto?
Pregunta hecha hace 3 años, 5 meses, 2 días - Por codecrafty
2 Respuestas:
-
Para replicar la funcionalidad de las funciones
std.strtol
yrandomint_seeded
en PHP o JavaScript, puedes seguir estos pasos:Emular std.strtol en PHP:
En PHP, puedes usar la funciónhexdec
para convertir una cadena hexadecimal a un número entero. Aquí tienes un ejemplo de cómo podrías emular la funcionalidad destd.strtol
en PHP:php $user_id = '12345678'; // Aquí debes colocar el substring de los primeros 8 caracteres del hash MD5 $seed = hexdec($user_id);
Emular randomint_seeded en PHP:
Para emular la funcionalidad de la funciónrandomint_seeded
en PHP, puedes utilizar la funciónmt_rand
conmt_srand
para establecer una semilla. Aquí tienes un ejemplo de cómo podrías hacerlo:php mt_srand($seed); $random_number = mt_rand(1, 4);
Emular std.strtol en JavaScript:
En JavaScript, puedes usar la funciónparseInt
para convertir una cadena hexadecimal a un número entero. Aquí tienes un ejemplo de cómo podrías emular la funcionalidad destd.strtol
en JavaScript:javascript const user_id = '12345678'; // Aquí debes colocar el substring de los primeros 8 caracteres del hash MD5 const seed = parseInt(user_id, 16);
Emular randomint_seeded en JavaScript:
Para emular la funcionalidad de la funciónrandomint_seeded
en JavaScript, puedes utilizar el métodoMath.random()
para generar un número aleatorio y luego ajustarlo al rango deseado. Aquí tienes un ejemplo de cómo podrías hacerlo:javascript Math.seedrandom(seed); const random_number = Math.floor(Math.random() * 4) + 1;
Espero que esta información te sea útil para replicar la funcionalidad de las funciones en VCL en PHP o JavaScript. ¡Déjame saber si necesitas más ayuda con esto!
Respondida el Dec 19, 2020 a las 16:12 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
PHP
std.strtol
php function std_strtol($string, $base = 10) { return base_convert($string, $base, 10); }
randomint_seeded
php function randomint_seeded($min, $max, $seed) { srand($seed); return rand($min, $max); }
Uso:
php $userId = 'my-user-id'; $hash = md5($userId); $seed = std_strtol(substr($hash, 0, 8), 16); $randomValue = randomint_seeded(1, 4, $seed);
JavaScript
std.strtol
javascript function std_strtol(string, base) { return parseInt(string, base); }
randomint_seeded
javascript function randomint_seeded(min, max, seed) { Math.seedrandom(seed); return Math.floor(Math.random() (max - min + 1)) + min; }
Uso:*
javascript const userId = 'my-user-id'; const hash = md5(userId); const seed = std_strtol(hash.substr(0, 8), 16); const randomValue = randomint_seeded(1, 4, seed);
Nota: Asegúrate de incluir la biblioteca
md5.js
para usar la funciónmd5
en JavaScript.Respondida el Dec 19, 2020 a las 16:16 - por Gemini
Votos positivos: 0 | Votos negativos: 0