Algoritmos de identificação

Bom, eu pensei um pouco e queria saber se é possível fazer isto: bolar um algoritmo que criasse um número a partir do cnpj, hora em milisegundos(a partir de 1/4) e o inteiro que representa o ip da máquina)… E que também fosse possível extrair estes 3 valores. Não sei se isto é possível, então queria a ajuda de vocês :wink:

Você tem certeza de que um IP com CNPJ num instante de tempo irá te dar um identificador único? E se o IP for de rede local? Bom, se sim (se o identificador será único), acredito que o problema é que com tudo isso junto o seu número vai ficar enorme. Não sei como é CNPJ, mas em relação a IP, você poderia comprimí-lo em 10 dígitos decimais.

Puxa, rapaz, teu caso é complicado mesmo, hein? Se eu fosse você, conectava ao servidor!!!

não tem como hehe, a aplicação deve funcionar mesmo fora da internet, aliás, estou começando a achar que vou ter q usar por ex, uma sequencia de caracteres, nao apenas numeros, assim, teriamos mais possibilidades… Mas uma coisa, alguém sabe alguma API do java que pegasse o MAC Address? Por exemplo: xf4qbcag seria a id de identificação

Ja pensou em usar o servidor como repositorio de ranges? Mais ou menos assim:

Cliente: Ei, servidor, tudo bem? Me arruma uns numeros pra eu usar?
Servidor: Opa, beleza! Voce pode usar 100000 ate 199999 por hoje. Divirta-se!

Outro Cliente: Ei, servidor, me arruma uns numeros tambem?
Servidor: Claro, fica com 200000 ate 299999!

E, no fim do dia, eh soh limpar tudo. Sincronize os relogios direitinho (NTP!) e voce nao vai ter problemas :wink:

o problema eh q se no inicio do dia nao tiver conexao com a internet…

Pelo o que o cv falou, só às vezes o programa vai precisar estar em rede. Mas se ele nunca vai poder estar em rede mesmo, essa faixa poderia ser especificada (se der via rede) na instalação do sistema. O que acha Eduardo?

Quanto a usar hexadecimais, se você aceita usar isso mesmo, eu recomendaria usar uma base maior tipo 36 (0-9, A-Z), porque vai comprimir ainda mais os números. Um IP, e inclusive um MAC Address, por exemplo, poderiam ocupar cada um “apenas” 7 dígitos.

Aí é só você reservar um certo range pra esses casos em que não foi possível se comunicar com o servidor. :wink:

Olá

Com os requisitos pedidos, eu usaria UDDI mesmo. Tá certo, é enorme mas não sou eu que vou conferir mesmo. Ele nem seria mostrado. Todo mundo dormiria mais tranqüilo.

[]s
Luca

Não pode ter um ID na máquina e outro ID no servidor e quando conectar no servidor ele passa os ID dele pra máquinas…

Mas se quiser HiLo, hibernate… http://www.hibernate.org/170.html

VELO

bom, eu realmente terei que usar uma base maior, como o renato falou, de 36 msm… Agora, só me digam se é viável isso: gerar um número a partir do inteiro que representa o ip, o cnpj, a hora e o mac address… E seria possível ainda extrair esses´dados do número gerado… Não sei se isso é possível, andei falando com um professor e ele mencionou o Teorema Chinês do Resto, mas eu creio que isso vai muito além do necessário…

Depende do extrair. Qual operação de extração você precisa?

A segunda é mais segura e viavel de implementar

no caso teria que ter 4 itens…

q(a, x, y, z, t) = true // verifica q a foi gerado a partir de x, y, z e t

onde x = milisegundos, y = ip, z = mac address e t = cnpj

Para os IPs, disponha os quatro octetos lado a lado em hexa, por exemplo 255.255.255.255 fica assim: FFFFFFFF. Então converta isso de hexa para base 36. O mesmo princípio para o MAC. Creio que com o CNPJ não seja muito diferente, tipo tirar os sinais e transformar de base 10 para 36.

Putz veio, HiLo!!! é o time stamp concatenado com o IP… garantido! O hibernate usa! Nem precisa do mac e/ou do CNPJ, ou troca o IP pelo MAC…

VELO

nao irei mais fazer aquilo de criar um numero gerado por outros 4 e extrailos, hehe, iria dar um trabalho danado, alias, se eh que eh possivel :stuck_out_tongue: