diff --git a/lib/uuid.dart b/lib/uuid.dart new file mode 100644 index 0000000..45589f9 --- /dev/null +++ b/lib/uuid.dart @@ -0,0 +1,26 @@ +import 'dart:math'; + +class Uuid { + final Random _random = Random(); + + /// Generate a version 4 (random) uuid. This is a uuid scheme that only uses + /// random numbers as the source of the generated uuid. + String generateV4() { + // Generate xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx / 8-4-4-4-12. + final special = 8 + _random.nextInt(4); + + return '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}-' + '${_bitsDigits(16, 4)}-' + '4${_bitsDigits(12, 3)}-' + '${_printDigits(special, 1)}${_bitsDigits(12, 3)}-' + '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}'; + } + + String _bitsDigits(int bitCount, int digitCount) => + _printDigits(_generateBits(bitCount), digitCount); + + int _generateBits(int bitCount) => _random.nextInt(1 << bitCount); + + String _printDigits(int value, int count) => + value.toRadixString(16).padLeft(count, '0'); +}