Sustitución de secuencia por número aleatorio

Me gustaría reemplazar algunas de las secuencias que uso para id's en mi db postgresql con mi propio generador de id a medida. El generador produciría un número aleatorio con un dígito de verificación al final. Así que esto:

SELECT nextval('customers')

Sería reemplazado por algo como esto:

SELECT get_new_rand_id('customer')

La función entonces devolvería un valor numérico tal como:[1-9][0-9]{9} donde el último dígito es una suma de comprobación.

Las preocupaciones que tengo son:

¿Cómo hago la cosa atómica?¿Cómo evito devolver el mismo ID dos veces? (Esto se detectaría al intentar insertarlo en una columna con una restricción única, pero creo que es demasiado tarde)¿Es esta una buena idea?

Nota 1: No quiero usar uuid, ya que se comunicará con los clientes y es mucho más fácil comunicar 10 dígitos que el uuid de 36 caracteres.

Nota 2: La función raramente sería llamada conSELECT get_new_rand_id() pero se asignaría como valor predeterminado en la columna id en lugar denextval().

EDITAR: Ok, buena discusión a continuación! Aquí hay una explicación parapor qué:

Entonces, ¿por qué cometer demasiadas cosas de esta manera? El propósito es ocultar la clave principal de los clientes.

Le doy a cada nuevo cliente un ID de cliente único (número de serie generado en la base de datos). Como le comunico ese número al cliente, es una tarea bastante simple para mis competidores monitorear mi negocio (hay otros números como la factura nr y el nr de pedido que tienen las mismas propiedades). Es esta supervisión la que me gustaría hacer un poco más difícil (nota: no imposible, pero más difícil).

¿Por qué el dígito de control?

Antes de que se hablara de ocultar el número de serie, agregué un dígito de verificación a ordernr, ya que en algunos puntos de la producción había dedos tontos, y pensé que sería una buena práctica mantener en el futuro.

Después de leer la discusión, ciertamente puedo ver que mi enfoque no es la mejor manera de resolver mi problema, pero no tengo otra buena idea de cómo resolverlo, así que, por favor, ayúdenme aquí.

¿Debo agregar una columna adicional donde coloco la identificación que expongo al cliente y mantengo la serie como clave principal?¿Cómo puedo generar la identificación para exponer de una manera sana y eficiente?¿Es necesario el checkdigit?

Respuestas a la pregunta(6)

Su respuesta a la pregunta