no hay ningún campo adicional en la base de datos: a través del algoritmo, el código promocional se puede descodificar a ID de usuario
Si bien esto generalmente se resolvería a través de una tabla adicional con referencias cruzadas, idealmente 1: n, para que una identificación de usuario pueda tener varios códigos promocionales válidos, esto parece estar explícitamente fuera de alcance. Esto también excluye códigos promocionales autoelegidos, desafortunadamente.
difícil de adivinar el ID de usuario
Idealmente, no debería ser posible adivinar el ID de usuario (y asegurarse de que acertó) en todo.
fácil de compartir verbalmente
Este podría ser el mayor problema al no usar una tabla adicional.
Propongo la siguiente solución:
Cifre sus identificadores de usuario.
Hay diferentes esquemas de encriptación que pueden producir resultados más pequeños que se pueden usar. Pero si, como lo sugiere su restricción en los cambios a la base de datos, el costo de la implementación es un factor determinante, vale la pena echarle un vistazo a RASA ya que mantiene el texto cifrado relativamente pequeño y las bibliotecas de cifrado están fácilmente disponibles.
Los bits resultantes podrían traducirse a palabras en lenguaje natural, por ejemplo, utilizando una lista de palabras para diceware .
Usando este enfoque, el texto cifrado sería fácil de comunicar (ya que es una cadena de palabras) y fácil de descifrar (traducción inversa, descifrar los bits resultantes).
Sin embargo, hay un problema: esos códigos pueden ser más largos de lo esperado (según el esquema de cifrado elegido) y pueden suponer una penalización de tiempo cuando se trata de escribirlos.
Aunque esto produce códigos más largos (en términos de tamaño de cadena), son mucho más fáciles de transmitir verbalmente, especialmente para los hablantes nativos que el resultado de base32, base64 o cualquiera de los enfoques habituales para la codificación de transporte.
Por lo tanto, a pesar de que una tabla 1: n sería ideal, usar el esquema de encriptado de ajuste y terminar con un código de 3 palabras podría ser la mejor opción, y definitivamente más fácil de compartir verbalmente que los sospechosos habituales para la codificación de datos. .