diff --git a/C#/source/Yitter.IdGenTest/Program.cs b/C#/source/Yitter.IdGenTest/Program.cs
index 4a46c9a..5433b69 100644
--- a/C#/source/Yitter.IdGenTest/Program.cs
+++ b/C#/source/Yitter.IdGenTest/Program.cs
@@ -10,7 +10,7 @@ namespace Yitter.OrgSystem.TestA
{
// 测试参数(默认配置下,最佳性能是10W/s)
- static int genIdCount = 5000; // 计算ID数量(如果要验证50W效率,请将TopOverCostCount设置为20000或适当增加SeqBitLength)
+ static int genIdCount = 50000; // 计算ID数量(如果要验证50W效率,请将TopOverCostCount设置为20000或适当增加SeqBitLength)
static short method = 1; // 1-漂移算法,2-传统算法
@@ -30,11 +30,11 @@ namespace Yitter.OrgSystem.TestA
Method = method,
WorkerId = 1,
- TopOverCostCount = 2000,
- WorkerIdBitLength = 1,
- SeqBitLength = 2,
+ //TopOverCostCount = 2000,
+ //WorkerIdBitLength = 1,
+ //SeqBitLength = 2,
- MinSeqNumber = 1,
+ //MinSeqNumber = 1,
// MaxSeqNumber = 200,
diff --git a/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs b/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs
index e6826db..8b8d24b 100644
--- a/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs
+++ b/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs
@@ -30,12 +30,13 @@ namespace Yitter.IdGenerator
///
/// 机器码
/// 与 WorkerIdBitLength 有关系
+ /// (ushort类型,最大值65535,如果有更高要求,请修改数据类型,或联系作者)
///
public virtual ushort WorkerId { get; set; } = 0;
///
/// 机器码位长
- /// 范围:2-21(要求:序列数位长+机器码位长不超过22)。
+ /// 范围:1-21(要求:序列数位长+机器码位长不超过22)。
/// 建议范围:6-12。
///
public virtual byte WorkerIdBitLength { get; set; } = 6;//10;
@@ -55,7 +56,7 @@ namespace Yitter.IdGenerator
///
/// 最小序列数(含)
- /// 默认5,不小于1,不大于MaxSeqNumber-2
+ /// 默认5,不小于1,不大于MaxSeqNumber
///
public virtual ushort MinSeqNumber { get; set; } = 5;
diff --git a/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs b/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs
index 3a6d6f5..18580df 100644
--- a/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs
+++ b/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs
@@ -30,24 +30,21 @@ namespace Yitter.IdGenerator
///
/// 机器码位长
- /// (机器码+序列数<=22位)
///
protected readonly byte WorkerIdBitLength = 0;
///
/// 自增序列数位长
- /// (机器码+序列数<=22位)
///
protected readonly byte SeqBitLength = 0;
///
- /// 最大序列数(含此值)
- /// 超过最大值,就会从MinSeqNumber开始
+ /// 最大序列数(含)
///
protected readonly int MaxSeqNumber = 0;
///
- /// 最小序列数(含此值)
+ /// 最小序列数(含)
///
protected readonly ushort MinSeqNumber = 0;
diff --git a/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs b/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs
index 6b9ece5..4a1afc8 100644
--- a/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs
+++ b/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs
@@ -57,19 +57,15 @@ namespace Yitter.IdGenerator
}
var maxSeqNumber = Math.Pow(2, options.SeqBitLength) - 1;
- //if (options.MaxSeqNumber > maxSeqNumber)
- //{
- // options.MaxSeqNumber = (int)maxSeqNumber;
- //}
if (options.MaxSeqNumber < 0 || options.MaxSeqNumber > maxSeqNumber)
{
throw new ApplicationException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]");
}
- var maxValue = maxSeqNumber;// maxSeqNumber - 2;
+ var maxValue = maxSeqNumber; // maxSeqNumber - 1;
if (options.MinSeqNumber < 1 || options.MinSeqNumber > maxValue)
{
- throw new ApplicationException("MinSeqNumber error. (range:[5, " + maxValue + "]");
+ throw new ApplicationException("MinSeqNumber error. (range:[1, " + maxValue + "]");
}
switch (options.Method)
diff --git a/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj b/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj
index 141e4f4..6589a2d 100644
--- a/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj
+++ b/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj
@@ -18,7 +18,7 @@
Yitter
https://gitee.com/yitter/idgenerator
MIT
- 1.0.6
+ 1.0.7
diff --git a/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java b/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java
index 0980cd4..d34a014 100644
--- a/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java
+++ b/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java
@@ -25,12 +25,13 @@ public class IdGeneratorOptions {
/**
* 机器码,必须由外部系统设置
* 与 WorkerIdBitLength 有关系
+ * (short类型,最大值32766,如果有更高要求,请修改数据类型,或联系作者)
*/
public short WorkerId = 0;
/**
* 机器码位长
- * 范围:2-21(要求:序列数位长+机器码位长不超过22)。
+ * 范围:1-21(要求:序列数位长+机器码位长不超过22)。
* 建议范围:6-12。
*/
public byte WorkerIdBitLength = 6;
@@ -50,7 +51,7 @@ public class IdGeneratorOptions {
/**
* 最小序列数(含)
- * 默认5,不小于1,不大于MaxSeqNumber-1
+ * 默认5,不小于1,不大于MaxSeqNumber
*/
public short MinSeqNumber = 5;
diff --git a/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java b/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java
index f67e665..311ee5b 100644
--- a/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java
+++ b/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java
@@ -23,24 +23,21 @@ public class SnowWorkerM1 implements ISnowWorker {
/**
* 机器码位长
- * (机器码+序列数<=22位)
*/
protected final byte WorkerIdBitLength;
/**
* 自增序列数位长
- * (机器码+序列数<=22位)
*/
protected final byte SeqBitLength;
/**
- * 最大序列数(含此值)
- * 超过最大值,就会从MinSeqNumber开始
+ * 最大序列数(含)
*/
protected final int MaxSeqNumber;
/**
- * 最小序列数(含此值)
+ * 最小序列数(含)
*/
protected final short MinSeqNumber;
@@ -64,7 +61,7 @@ public class SnowWorkerM1 implements ISnowWorker {
WorkerId = options.WorkerId;
WorkerIdBitLength = options.WorkerIdBitLength == 0 ? 6 : options.WorkerIdBitLength;
SeqBitLength = options.SeqBitLength == 0 ? 6 : options.SeqBitLength;
- MaxSeqNumber = options.MaxSeqNumber > 0 ? options.MaxSeqNumber : (int) Math.pow(2, SeqBitLength);
+ MaxSeqNumber = options.MaxSeqNumber > 0 ? options.MaxSeqNumber : (int) Math.pow(2, SeqBitLength) - 1;
MinSeqNumber = options.MinSeqNumber;
TopOverCostCount = options.TopOverCostCount;
BaseTime = options.BaseTime != 0 ? options.BaseTime : 1582136402000L;
diff --git a/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java b/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java
index ac916fc..3563536 100644
--- a/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java
+++ b/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java
@@ -30,7 +30,7 @@ public class DefaultIdGenerator implements IIdGenerator {
}
double maxWorkerIdNumber = Math.pow(2, options.WorkerIdBitLength) - 1;
- if (options.WorkerId < 1 || options.WorkerId > maxWorkerIdNumber) {
+ if (options.WorkerId < 0 || options.WorkerId > maxWorkerIdNumber) {
throw new IdGeneratorException("WorkerId error. (range:[1, " + maxWorkerIdNumber + "]");
}
@@ -43,9 +43,9 @@ public class DefaultIdGenerator implements IIdGenerator {
throw new IdGeneratorException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]");
}
- double maxValue = maxSeqNumber - 2;
- if (options.MinSeqNumber < 5 || options.MinSeqNumber > maxValue) {
- throw new IdGeneratorException("MinSeqNumber error. (range:[5, " + maxValue + "]");
+ double maxValue = maxSeqNumber;
+ if (options.MinSeqNumber < 1 || options.MinSeqNumber > maxValue) {
+ throw new IdGeneratorException("MinSeqNumber error. (range:[1, " + maxValue + "]");
}
switch (options.Method) {