TypeScript GUID类?

Gus*_*tav 55 uuid guid typescript

有没有人知道TypeScript中的一个好的,可靠的C#实现GUID(UUID)?

可以自己做,但想到如果其他人以前做过,我会节省时间.

Fen*_*ton 123

我的TypeScript实用程序中有一个基于JavaScript GUID生成器的实现.

这是代码:

class Guid {
  static newGuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random() * 16 | 0,
        v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  }
}

// Example of a bunch of GUIDs
for (var i = 0; i < 100; i++) {
  var id = Guid.newGuid();
  console.log(id);
}
Run Code Online (Sandbox Code Playgroud)

请注意以下事项:

C#GUID保证是唯一的.这种解决方案很可能是独一无二的."非常可能"和"保证"之间存在巨大差距,您不希望陷入这种差距.

JavaScript生成的GUID非常适合用作等待服务器响应时使用的临时密钥,但我不一定将它们视为数据库中的主键.如果您打算依赖JavaScript生成的GUID,我很想在每次创建GUID时检查一个寄存器,以确保您没有重复(在某些情况下,Chrome浏览器中出现了一个问题) ).

  • @PaulGorbas请参阅https://en.wikipedia.org/wiki/Globally_unique_identifier - 此4表示一种GUID版本.4表示它不是MAC地址基础而是伪随机的,可能不是加密安全的. (17认同)
  • 为什么要生成第三组的第一个字符始终为'4'的GUID? (6认同)
  • "C#GUID"与您的函数生成的不同或不同.碰撞是极不可能的,你完全可以依靠它们的独特性.您当然可以将它用作主键,检查注册表是没有用的.但是,此实现不具有加密安全性.所以价值观可以预测.但这不是唯一性的问题. (6认同)
  • 请注意这个答案的潜在编辑:https://meta.stackoverflow.com/questions/260245/when-should-i-make-edits-to-code (2认同)

小智 11

我找到了这个https://typescriptbcl.codeplex.com/SourceControl/latest

这是他们拥有的Guid版本,以防链接以后不起作用.

module System {
    export class Guid {
        constructor (public guid: string) {
            this._guid = guid;
        }

        private _guid: string;

        public ToString(): string {
            return this.guid;
        }

        // Static member
        static MakeNew(): Guid {
            var result: string;
            var i: string;
            var j: number;

            result = "";
            for (j = 0; j < 32; j++) {
                if (j == 8 || j == 12 || j == 16 || j == 20)
                    result = result + '-';
                i = Math.floor(Math.random() * 16).toString(16).toUpperCase();
                result = result + i;
            }
            return new Guid(result);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是,这个没有为随机UUID设置强制位模式,第三个段中的第一个数字必须是4,即UUID版本号,第四个段中的第一个数字必须使用位掩码10xx,这意味着只有值在该位置允许8,9,A和B. Wiki网址:https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29 (4认同)
  • +1粘贴源代码,因为指向该站点的链接不再包含任何打字稿文件,并且它们托管的JS文件与您发布的代码看起来不一样。 (2认同)