Substituindo seqüência com número aleatório

Eu gostaria de substituir algumas das seqüências que eu uso para id's no meu banco de dados postgresql com o meu próprio gerador de ID personalizado. O gerador produziria um número aleatório com um checkdigit no final. Então, é isso:

SELECT nextval('customers')

seria substituído por algo como isto:

SELECT get_new_rand_id('customer')

A função retornaria um valor numérico como:[1-9][0-9]{9} onde o último dígito é uma soma de verificação.

As preocupações que tenho são:

Como eu faço a coisa atômicaComo evito retornar o mesmo id duas vezes (isso seria capturado ao tentar inseri-lo em uma coluna com restrição exclusiva, mas depois é tarde para eu pensar)Esta é uma boa ideia?

Nota 1: Eu não quero usar uuid, uma vez que é para ser comunicada com os clientes e 10 dígitos é muito mais simples de se comunicar do que o uuid de 36 caracteres.

Nota 2: A função raramente seria chamada comSELECT get_new_rand_id() mas seria atribuído como valor padrão na coluna id em vez denextval().

EDITAR: Ok, boa discussão abaixo! Aqui estão algumas explicações paraporque:

Então, por que eu exagero as coisas dessa maneira? O objetivo é ocultar a chave primária dos clientes.

Eu dou a cada novo cliente um customerId exclusivo (número de série gerado no db). Como comunico esse número com o cliente, é uma tarefa bastante simples para meus concorrentes monitorarem meu negócio (há outros números, como fatura nr e order nr, que têm as mesmas propriedades). É esse monitoramento que eu gostaria de tornar um pouco mais difícil (nota: não impossível, mas mais difícil).

Por que o dígito de verificação?

Antes de falarmos sobre esconder o número de série, acrescentei um checkdigit a ordernr, já que havia alguns dedos em alguns pontos da produção, e meu pensamento era que essa seria uma boa prática a ser mantida no futuro.

Depois de ler a discussão, posso certamente ver que a minha abordagem não é a melhor maneira de resolver o meu problema, mas não tenho outra boa ideia de como resolvê-lo, portanto, por favor, ajudem-me aqui.

Devo adicionar uma coluna extra onde coloco o ID que exponho ao cliente e mantenho a serial como chave primária?Como posso gerar o ID para expor de uma maneira sã e eficiente?O checkdigit é necessário?

questionAnswers(6)

yourAnswerToTheQuestion