You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 4.4 kB

4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. # ❄ idgenerator-TypeScript
  2. ## 介绍
  3. 项目更多介绍参照:https://github.com/yitter/idgenerator
  4. 代码贡献者:zhupengfei(在 bubao 布宝 的JS基础上改版,感谢bubao 布宝)
  5. js Number 类型最大数值:9007199254740992(16位),
  6. 在JS中没有bigint类型,所以建议将ID控制在16位以内,统一使用number类型
  7. 执行测试代码
  8. ```bash
  9. ts-node test/test1.ts
  10. ```
  11. ## 使用
  12. ```js
  13. import { snowflakeIdv1 } from '../snowflakeIdv1'
  14. const WorkerId = process.env.WorkerId == undefined ? 1 : process.env.WorkerId
  15. let gen1 = new snowflakeIdv1({ WorkerId: WorkerId})
  16. let id1 = gen1.NextId()
  17. console.log(id1, id1.toString().length)
  18. ```
  19. ## 示例
  20. ```js
  21. import { snowflakeIdv1 } from '../snowflakeIdv1'
  22. const WorkerId = process.env.WorkerId == undefined ? 1 : process.env.WorkerId
  23. let gen1 = new snowflakeIdv1({ WorkerId: WorkerId, SeqBitLength: 6 })
  24. for (let i = 0; i < 10; i++) {
  25. let id1 = gen1.NextId()
  26. console.log(`${i} ID:${id1} 长度:${id1.toString().length}`)
  27. }
  28. $ ts-node test/test4.ts
  29. 0 ID:234712552579141 长度:15
  30. 1 ID:234712552587333 长度:15
  31. 2 ID:234712552587334 长度:15
  32. 3 ID:234712552587335 长度:15
  33. 4 ID:234712552587336 长度:15
  34. 5 ID:234712552591429 长度:15
  35. 6 ID:234712552591430 长度:15
  36. 7 ID:234712552591431 长度:15
  37. 8 ID:234712552591432 长度:15
  38. 9 ID:234712552591433 长度:15
  39. import { snowflakeIdv1 } from '../snowflakeIdv1'
  40. const WorkerId = process.env.WorkerId == undefined ? 1 : process.env.WorkerId
  41. let gen1 = new snowflakeIdv1({ WorkerId: WorkerId, SeqBitLength: 11 })
  42. for (let i = 0; i < 10; i++) {
  43. let id1 = gen1.NextId()
  44. console.log(`${i} ID:${id1} ${typeof id1} 长度:${id1.toString().length}`)
  45. }
  46. $ ts-node test/test4.ts
  47. 0 ID:7510958933018629 number 长度:16
  48. 1 ID:7510958933280773 number 长度:16
  49. 2 ID:7510958933280774 number 长度:16
  50. 3 ID:7510958933280775 number 长度:16
  51. 4 ID:7510958933411845 number 长度:16
  52. 5 ID:7510958933411846 number 长度:16
  53. 6 ID:7510958933542917 number 长度:16
  54. 7 ID:7510958933542918 number 长度:16
  55. 8 ID:7510958933542919 number 长度:16
  56. 9 ID:7510958933673989 number 长度:16
  57. import { snowflakeIdv1 } from '../snowflakeIdv1'
  58. const WorkerId = process.env.WorkerId == undefined ? 1 : process.env.WorkerId
  59. let gen1 = new snowflakeIdv1({ WorkerId: WorkerId, SeqBitLength: 12 })
  60. for (let i = 0; i < 10; i++) {
  61. let id1 = gen1.NextId()
  62. console.log(`${i} ID:${id1} ${typeof id1} 长度:${id1.toString().length}`)
  63. }
  64. $ ts-node test/test4.ts
  65. 0 ID:15021931987734533 bigint 长度:17
  66. 1 ID:15021931987996677 bigint 长度:17
  67. 2 ID:15021931987996678 bigint 长度:17
  68. 3 ID:15021931987996679 bigint 长度:17
  69. 4 ID:15021931987996680 bigint 长度:17
  70. 5 ID:15021931988258821 bigint 长度:17
  71. 6 ID:15021931988258822 bigint 长度:17
  72. 7 ID:15021931988258823 bigint 长度:17
  73. 8 ID:15021931988258824 bigint 长度:17
  74. 9 ID:15021931988520965 bigint 长度:17
  75. import { snowflakeIdv1 } from '../snowflakeIdv1'
  76. const WorkerId = process.env.WorkerId == undefined ? 1 : process.env.WorkerId
  77. let gen1 = new snowflakeIdv1({ WorkerId: WorkerId, SeqBitLength: 13 })
  78. for (let i = 0; i < 10; i++) {
  79. let id1 = gen1.NextId()
  80. console.log(`${i} ID:${id1} ${typeof id1} 长度:${id1.toString().length}`)
  81. }
  82. $ ts-node test/test4.ts
  83. 0 ID:30043877337997317 bigint 长度:17
  84. 1 ID:30043877338521605 bigint 长度:17
  85. 2 ID:30043877338521606 bigint 长度:17
  86. 3 ID:30043877339045893 bigint 长度:17
  87. 4 ID:30043877339045894 bigint 长度:17
  88. 5 ID:30043877339045895 bigint 长度:17
  89. 6 ID:30043877339045896 bigint 长度:17
  90. 7 ID:30043877339570181 bigint 长度:17
  91. 8 ID:30043877339570182 bigint 长度:17
  92. 9 ID:30043877339570183 bigint 长度:17
  93. ```
  94. ## 同时兼容number和bigint的写法
  95. 如果您觉得这个用法更好,可以手动替换对应方法
  96. ```js
  97. /**
  98. * 生成ID
  99. * @returns
  100. */
  101. public NextId(): number | bigint {
  102. if (this._IsOverCost) {
  103. //
  104. let id = this.NextOverCostId()
  105. if (id >= 9007199254740992n)
  106. return id
  107. else
  108. return parseInt(id.toString())
  109. } else {
  110. //
  111. let id = this.NextNormalId()
  112. if (id >= 9007199254740992n)
  113. return id
  114. else
  115. return parseInt(id.toString())
  116. }
  117. }
  118. ```