Ocean/NumGen/GenerateUniqueID.go
Thorsten Sommer 81c4d15d9f Add the new NumGen
Added the new and distributed NumGen, which replaces the old one. The
old implementation was based on a master server.
2015-06-18 17:13:41 +02:00

40 lines
990 B
Go

package NumGen
import (
"math/big"
)
// Internal function to generate a unique ID with the given sequenceNumber.
func generateUniqueID(sequenceNumber int) (id int64) {
// Ensure, that the sequenceNumber is not smaller than 0:
if sequenceNumber < 0 {
sequenceNumber = sequenceNumber * -1
}
// Ensure, that the sequenceNumber is not bigger than 999:
if sequenceNumber > 999 {
sequenceNumber = 999
}
// Convert the sequenceNumber to a 64 bit integer:
seq := int64(sequenceNumber)
// Generate the first and second part of the ID:
timeID := generateTimeID() // First part
machineID := generateMachineID() // Second part
// Convert all numbers to big integers:
bigSEQ := big.NewInt(seq)
bigMachineID := big.NewInt(machineID)
bigTimeID := big.NewInt(timeID)
// Add the parts to get the result:
bigResult := bigTimeID.Add(bigTimeID, bigMachineID)
bigResult = bigResult.Add(bigResult, bigSEQ)
// The result as 64 bit integer:
id = bigResult.Int64()
return
}