Generate a name-based UUID v3 using MD5 hashing of namespace and name.
Code
Utilitiesrequire 'digest'
ns_bytes = namespace.delete('-').scan(/../).map { |b| b.to_i(16) }.pack('C*')
hash = Digest::MD5.digest(ns_bytes + name)
bytes = hash.bytes
bytes[6] = (bytes[6] & 0x0f) | 0x30
bytes[8] = (bytes[8] & 0x3f) | 0x80
return '%08x-%04x-%04x-%04x-%012x' % [
bytes[0..3].pack('C*').unpack1('N'),
bytes[4..5].pack('C*').unpack1('n'),
bytes[6..7].pack('C*').unpack1('n'),
bytes[8..9].pack('C*').unpack1('n'),
bytes[10..15].pack('C*').unpack1('Q>') & 0xffffffffffff
]Parameters
Namespace UUID (use DNS, URL, OID, or X500 namespace).
Name to hash within the namespace.
Server
More Ruby Snippets
Generate UUID v1
Generate a time-based UUID v1 using timestamp and random node ID.
Generate UUID v4
Generate a random UUID v4 (Universally Unique Identifier).
Generate UUID v5
Generate a name-based UUID v5 using SHA-1 hashing of namespace and name.
Generate UUID v6
Generate a reordered time-based UUID v6 with improved sortability for databases.
Generate UUID v7
Generate a Unix timestamp-based UUID v7 with millisecond precision, ideal for database primary keys.
Array Difference
Find elements in the first array that are not present in the second array.