随机生成6位唯一标识(对本地数据库来讲)
随机生成6位唯一标识(对本地数据库来讲)
C# 生成6位唯一标识(全数字,不带4的)
答案:3 悬赏:80
解决时间 2021-04-06 19:39
- 提问者网友:傀儡离开
- 2021-04-06 10:48
最佳答案
- 二级知识专家网友:情窦初殇
- 2021-04-06 11:24
public int getKey()
{
Random rd = new Random();
bool isOK = true;
int key = 0;
while (isOK)
{
key = (int)(rd.NextDouble() * 999999);
if (key.ToString().IndexOf("4") == -1)//判断是否包含4
{
//如果怕生成重复的数据,可以在这里加一个判断是否重复的方法
//if(CheckKey())
isOK = false;
}
}
return key;
}
{
Random rd = new Random();
bool isOK = true;
int key = 0;
while (isOK)
{
key = (int)(rd.NextDouble() * 999999);
if (key.ToString().IndexOf("4") == -1)//判断是否包含4
{
//如果怕生成重复的数据,可以在这里加一个判断是否重复的方法
//if(CheckKey())
isOK = false;
}
}
return key;
}
全部回答
- 1楼网友:陪衬角色
- 2021-04-06 12:53
这是不可能的,你算算就知道了,一共能生成多少个标识。
- 2楼网友:旧事诱惑
- 2021-04-06 12:05
USE tempdb
GO
-- 创建测试表
CREATE TABLE tb(id char(8))
-- 测试数据插入的处理时间, 记录开始处理的时间点
DECLARE @dt datetime
SET @dt = GETDATE()
-- 插入随机数据
SET NOCOUNT ON
DECLARE @row INT
-- 待插入数据
DECLARE @iid CHAr(8)
SET @row = 10000 -- 设置总记录数
WHILE @row >0
BEGIN
-- 显示提示信息, 表示还需要插入多行数据
RAISERROR('need %d rows', 10, 1, @row) WITH NOWAIT
-- 插入随机的位编码数据
SET ROWCOUNT @row
SET @iid = RIGHt(CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 6)
IF CHARINDEX('4',@iid)=0
INSERT tb SELECt
id = @iid
SET @row = @row - @@ROWCOUNT
END
-- 显示插入数据使用的时间
SELECT BeginDate = @dt, EndDate = GETDATE(),
Second = DATEDIFF(Second, @dt, GETDATE())
GO
-- 显示最终的结果记录是否正确
SELECT COUNT(*) FROM tb
GO
-- 删除测试
--DROP TABLE tb
简单的写了个点sql 实际数据应该是有40W多行但是我自己只用10000行做了测试~你要是用100万的数据集做测试建议把print去掉~太多了而且去重的部分要优化下
Ps:我假定是从1到99999所以可能实际和你需求有偏差~自己改下吧~大体应该没错~而且这玩意相当耗费性能。。我插入取得是100W以内的随机数算上判断重复加上插入和中间的输出(可以不要)居然要50秒 (后来又改了下2秒内完成)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯