Quiero generar números de código únicos (compuestos de 7 dígitos exactamente). El número de código se genera aleatoriamente y se guarda en la tabla MySQL.Generando códigos únicos que son diferentes en dos dígitos
Tengo otro requisito. Todos los códigos generados deben diferir en al menos dos dígitos. Esto es útil para evitar errores al escribir el código de usuario. Con suerte, evitará referirse a otro código de usuario mientras se realizan algunas operaciones, ya que es más improbable que pierda dos dígitos y coincida con otro código de usuario existente.
La generar algoritmo funciona simplemente les gusta:
- Recuperación de todos los códigos anteriores si alguno de tabla de MySQL.
- Genera un código a la vez.
- Reste el código generado con todos los códigos anteriores.
- Compruebe el número de dígitos distintos de cero en el resultado de la resta.
- Si es> 1, acepte el código generado y añádalo a los códigos anteriores.
- De lo contrario, salte a 2.
- Repita los pasos del 2 al 6 para la cantidad de códigos solicitados.
- Guarde los códigos generados en la tabla DB.
El algoritmo funciona bien, pero el problema está relacionado con el rendimiento. Lleva mucho tiempo terminar de generar los códigos cuando se solicita generar un gran número de códigos como: 10,000.
La pregunta: ¿Hay alguna forma de mejorar el rendimiento de este algoritmo?
Estoy usando perl + MySQL en el servidor de Ubuntu si eso importa.
El dígito de control es una excelente idea para esta aplicación. –
Esta es una muy buena idea. También asegura que no hay dos códigos que puedan variar en un solo dígito, ya que al cambiar cualquier dígito también se cambiará la suma de comprobación. –
Corrección - cambiar el dígito _probablemente_ cambia la suma de comprobación. Definitivamente podría crear dos códigos que solo difieren en un carácter si lo intentó. –