| // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /** |
| * A UUID generator library. |
| */ |
| library usage.uuid; |
| |
| import 'dart:math' show Random; |
| |
| /** |
| * A UUID generator. This will generate unique IDs in the format: |
| * |
| * f47ac10b-58cc-4372-a567-0e02b2c3d479 |
| * |
| * The generated uuids are 128 bit numbers encoded in a specific string format. |
| * |
| * For more information, see |
| * http://en.wikipedia.org/wiki/Universally_unique_identifier. |
| */ |
| class Uuid { |
| Random _random = new 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. |
| int 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'); |
| } |