【问题标题】:A TypeScript GUID class? [closed]TypeScript GUID 类? [关闭]
【发布时间】:2014-12-17 13:30:17
【问题描述】:

有谁知道 TypeScript 中 C# 的良好、可靠的实现,例如 GUID (UUID)?

可以自己做,但我想如果其他人之前做过,我会腾出时间。

【问题讨论】:

标签: typescript uuid guid


【解决方案1】:

在我的TypeScript utilities 中有一个基于 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);
}

请注意以下几点:

C# GUID 保证是唯一的。这个解决方案很可能是独一无二的。 “很有可能”和“保证”之间存在巨大的差距,您不想跌破这个差距。

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

【讨论】:

  • 为什么生成 GUID 时第 3 组的第一个字符始终为“4”?
  • @PaulGorbas 请参阅en.wikipedia.org/wiki/Globally_unique_identifier - 这 4 表示一种 GUID 版本。 4 表示它不是基于 MAC 地址的,而是伪随机的,可能不是密码安全的。
  • “C# GUID”与您的函数生成的 GUID 一样独特。碰撞的可能性极小,您完全可以依靠它们的独特性。您当然可以将其用作主键,并且检查注册表没有帮助。但是,此实现在密码学上并不安全。所以价值可能是可预测的。但这不是唯一性问题。
  • 此答案的潜在编辑请注意:meta.stackoverflow.com/questions/260245/…
  • 如果您使用 tslint 并且它抱怨按位运算符 stackoverflow.com/questions/34578677/… 进行检查。
【解决方案2】:

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

这里是the Guid version,以防以后链接失效。

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);
        }
    }
}

【讨论】:

  • 遗憾的是这个没有设置随机UUID的强制位模式,第三段的第一个数字必须是4,即UUID版本号,第四段的第一个数字必须使用位掩码 10xx,表示该位置仅允许值 8、9、A 和 B。维基网址:en.wikipedia.org/wiki/…
  • +1 用于粘贴源代码,因为该站点的链接不再有任何打字稿文件,并且它们托管的 JS 文件看起来不像您发布的代码。
  • @PaulGorbas 确实如此。我添加了完整的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
相关资源
最近更新 更多