sql >> Database >  >> RDS >> Mysql

Unieke trackingnummers genereren

Voor betekenisloze gegevens zijn hashes van de tijd plus een zout altijd ijzersterk en kunnen ze niet gemakkelijk worden geraden (vergeef de Python, ik heb gehoord van dit Ruby-ding, maar ik heb het nooit in mijn handen gehouden):

>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()
'7a8b73fa7e0dadf246612e6001ede165'

Kort het in als je wilt:

>>> hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:16]
'46ffb69ebc96412d'

Gebruik in plaats daarvan een geheel getal, als je wilt, maar de lengte kan variëren met deze code, tenzij je een nul-pad gebruikt:

>>> int(hashlib.md5(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1346212029197308

In voor "zomg md5 is niet crypto-veilig":

>>> int(hashlib.sha256(str(time.time()) + "!salt!").hexdigest()[:13], 16)
1948411134966366

Verdorie, je hoeft niet eens tijd te gebruiken, je kunt een automatisch ophogend geheel getal gebruiken, zolang je het maar zout:

>>> int(hashlib.sha256(str(1) + "!salt!").hexdigest()[:13], 16)
1269883740611281
>>> int(hashlib.sha256(str(2) + "!salt!").hexdigest()[:13], 16)
3655373802716929

hasj. Is er iets dat ze niet kunnen doen?



  1. Kan ik een atomaire MERGE doen in Oracle?

  2. Een reeks SQL-query's uitvoeren met behulp van een batchbestand?

  3. Hoe som -of- 0 selecteren als er geen records bestaan?

  4. Wat is het doel van een IMPLICIETE JOIN in sql?