Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Micilini Roll

Gerador de Chaves Logica

Recommended Posts

Olá pessoal do forum, o negocio é o seguinte:

 

Estou com um arquivo PHP responsável por gerar chaves UNICAS (Igual ID), as chaves possuem o seguinte formato:

 

Caracter especial + 3 numeros + 1 letra

 

[@] + [0-9] +[0-9] +[0-9] + [A-Z]

 

@321Q

 

 

Esta chave é gerada da seguinte forma:

 

  1. O PHP gera esta chave aleatória contendo @ + 3 numero + 1 letra
  2. Em seguida ele verifica no banco de dados se esta chave existe
  3. Se existir ele inicia o processo novamente (cria outra chave)
  4. Se nao existir ele insere no banco de dados

Bem legal não acham? Mas se pensarmos no futuro veremos um problema!

 

Sabemos que o sistema inicialmente pode gerar no maximo 27 mil chaves, pois 10x10x10x26 = 27,000

 

O primeiro problema é que, inicialmente pode ocorrer uma probabilidade pequena de ele gerar uma chave que ja existe no banco de dados, mas rapidamente ele irá resolver isso... Agora vamos supor que o sistema agora possua 26,989 chaves ja cadastradas, o sistema de geração de chaves pode entrar em loop infinito e demore muito para gerar uma chave que ainda não exista, pois a probabilidade de ele gerar uma chave que ja exista é GRANDE!

 

Então qual a melhorar forma de gerar esta chaves?

 

Tenha em mente que:

 

  1. Muitos usuarios simultaneamente podem requisitar as chaves e acredito que isso poderia criar um problema de delay (e 2 ou mais usuários possam possuir a mesma chave!

 

 

Possiveis Soluções

 

​Eu poderia criar um gerador na qual gere as chaves de forma crescente e não de uma forma aleatoria exemplo:

 

@000A

@001A

@002A

...........

@999Z

 

 

Mas esta solução acredito que haja um problema!

 

O comando realiza o seguinte processo:

 

  • Gera a chave
  • verifica se existe esta chave no banco de dados
  • Se existir ele nao insere
  • Se nao existir ele insere

 

Ai eu tenho um certo receio, pois como eu disse muitas pessoais podem acessar o mesmo arquivo simultaneamente, e nesse caso pode acontecer de uma pessoa requisitar uma chave e verificar que ela não existe no banco de dados, e antes que o sistema insira esta chave no banco de dados, pode vir outra pessoa gerar a mesma chave que ela em seguida verificar que não existe esta chave no banco de dados (pois ainda não foi inserida) e ambas as pessoas ficarem com a mesma chave!

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 vc esqueeeu dos caracteres especiais , nao !?

 

2 pq a formacao da chave precisa ser esta ,nao pode ser algo como 6 caracteres letras ou nemeros , ou uma sequencia si ples autoincremento !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para um maior controle e segurança, e sabendo que os dados nunca iriam se repetir, eu utilizaria a a função alphaID para criptografar e descriptografar o ID Auto Increment

 

https://github.com/sagargp/coolsitebro/blob/master/alphaID.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.