中易网

C# 生成6位唯一标识(全数字,不带4的)

答案:3  悬赏:80  
解决时间 2021-04-06 19:39
随机生成6位唯一标识(对本地数据库来讲)

随机生成6位唯一标识(对本地数据库来讲)

最佳答案
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;
}
全部回答
这是不可能的,你算算就知道了,一共能生成多少个标识。
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秒内完成)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
庆宝土特产在哪里啊,我有事要去这个地方
唐嫣 杨幂 刘诗诗的手机号码是多少
初中毕业读五年制职高好还是普通高中好?
P9联通定制版与标配全网通版有何不同处,价格
当当网里的购物车点结算按钮没反应!为什么?
舞蹈中有一种类似于京剧转圈 谁知道这叫什么
广东交通职业技术学院录取分数线
植物大战僵尸2花园战争虎牙直播
港币最大面值是多少?
天红纳兰美容时尚生活馆这个地址在什么地方,
我的银行卡是外地的,丢了之后电话挂失了,现
什么蛙什么鸟成语
三星盖乐世mega市面价
求 竞选英语课代表的作文
成都宏林数码维修服务中心地址在什么地方,想
推荐资讯
格之格nt-cn2612t 易加粉硒鼓 怎么加粉
怎么关闭电脑快捷键
小米手柄能连接xbox吗
睢宁哪家婚纱摄影比较好
怎么用PLc编程控制发热丝发热?
交大嵌入式培训怎么样?
纽曼的MP3出现磁盘错误,又不可以格式化?有
仰卧睡觉肚子痛
冰箱要放置绝对水平还是平稳?
联想小新出色版i2000iris的集成显卡怎么样
挤黑头留下的红印能恢复吗?
最近网易邮箱为什么常闪退?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?