@elshottaDebería considerar usar una función pseudo-aleatoria que le proporcione su lenguaje de programación o el mismo sistema operativo donde está ahora mismo, pero lo relevante aquí es que debe tener una fuerte entropía para impedir volver a tener números repetidos.
No sé qué lenguaje esté usando, supondré que PHP, pero le dejo otros ejemplos por si acaso le sirve y también para comprender cómo funcionan una capa más abajo de la abstracción.
Usar una formula como esta
FLOOR(RAND()*(b-a)+a) significa que deseas obtener un número en un rango de
a a
b pero no significa que se pueda repetir en algunas iteraciones más, por lo que es mejor usar funciones como las siguiente:
<?php
$bytes = random_bytes(5);
var_dump(bin2hex($bytes));
?>
Esto imprimiría:
string(10) "89429d753c"
Recuerde que está en hexadecimal la salida para que se pueda mostrar de una forma clara para nosotros los humanos, pero debe convertir esos bytes en enteros válidos para poder ser usados.
Se usa la función
bin2hex, como le mencioné, para mostrar en un formato claro para nosotros, pero para usar enteros,
unpack podría ayudarle:
<?php
$bytes = random_bytes(5);
var_dump(unpack("n", $bytes));
?>
Eso resultaría en:
array(1) {
[1]=>
int(40219)
}
Aquí unas referencias de la misma documentación:
*- Los enlaces son solo para miembros.
Registrate o
iniciá sesión*- Los enlaces son solo para miembros.
Registrate o
iniciá sesiónSi está usando Python le recomiendo la librería
secrets que se encarga de ser un envoltorio entre la función generadora de su sistema operativo:
import secrets
print(secrets.token_hex(5))
Imprimiría:
660fb8c6e6
Referencia:
*- Los enlaces son solo para miembros.
Registrate o
iniciá sesiónY por último usando un archivo especial:
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUFF_SIZE 6
void gen_random(char *buff, int l) {
int i;
FILE *gen;
gen = fopen("/dev/urandom", "rb");
while (l--)
buff += sprintf(buff, "%02x", getc(gen));
buff -= l*2;
fclose(gen);
}
int main(void) {
char buff[MAX_BUFF_SIZE*2];
gen_random(buff, MAX_BUFF_SIZE);
printf("%s\n", buff);
return EXIT_SUCCESS;
}
Imprimiría:
5510aeb233ce
Referencia:
*- Los enlaces son solo para miembros.
Registrate o
iniciá sesión/dev/random
~ DtxdF