Hibok
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

38 linhas
1.3 KiB

  1. /// A UUID generator library.
  2. library uuid;
  3. import 'dart:math' show Random;
  4. /// A UUID generator.
  5. ///
  6. /// This will generate unique IDs in the format:
  7. ///
  8. /// f47ac10b-58cc-4372-a567-0e02b2c3d479
  9. ///
  10. /// The generated uuids are 128 bit numbers encoded in a specific string format.
  11. /// For more information, see
  12. /// [en.wikipedia.org/wiki/Universally_unique_identifier](http://en.wikipedia.org/wiki/Universally_unique_identifier).
  13. class Uuid {
  14. final Random _random = new Random();
  15. /// Generate a version 4 (random) uuid. This is a uuid scheme that only uses
  16. /// random numbers as the source of the generated uuid.
  17. String generateV4() {
  18. // Generate xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx / 8-4-4-4-12.
  19. int special = 8 + _random.nextInt(4);
  20. return '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}-'
  21. '${_bitsDigits(16, 4)}-'
  22. '4${_bitsDigits(12, 3)}-'
  23. '${_printDigits(special, 1)}${_bitsDigits(12, 3)}-'
  24. '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}';
  25. }
  26. String _bitsDigits(int bitCount, int digitCount) =>
  27. _printDigits(_generateBits(bitCount), digitCount);
  28. int _generateBits(int bitCount) => _random.nextInt(1 << bitCount);
  29. String _printDigits(int value, int count) =>
  30. value.toRadixString(16).padLeft(count, '0');
  31. }