生成5位数的无重复的序列号

唐佳 发布于 2016/09/22 15:45
阅读 1K+
收藏 1

每次执行代码都能生成一个序列号,而且所有执行生成的序列号是不重复的。

如果能用JavaScript语音或者是Python语言回答我比较容易理解

加载中
2
中山野鬼
中山野鬼
给楼主一个建议,和具体多少位没有关系。你给出一个累进的正整数。使用一次就是自加1 。你生成100个序列号,它的值就是100. 然后通过映射,散列,或加密转换,形成一串数字。当你连续生成5个号,则是如100,101,102,103,104等进行转换。转换前是连续的,但出来的序列号并不连续。核心是你的那个转换函数。哈。
1
自由PHP
自由PHP
很简单的,你就AAAAAA、AAAAAB一直下去,保证不重复
1
模糊的张狂
模糊的张狂
五位的序列号,是不是稍微有点短?
1
Tuesday
Tuesday

这问题问得没经过大脑呀...

纯数字? 纯字母? 

符号呢?

可以组合? 

数量限制, 

1
haitaosoft
haitaosoft

需求前提没说明:是否要求 多机同时运行,或者是 单机多实例同时运行?

如果单实例,那么就很简单了,定义一个每位的取值范围,逐一递增好了。。。

不过,只有5位,估计也只能是单实例了

0
_
_Yud
http://www.zhihu.com/question/20462696
0
阿信sxq
阿信sxq

5位数一共就只有那么多,就算算法能够实现,运行足够多次数以后,也一样会重复,还是把宽度增加,才可以。

一楼的那个,确实是一个办法,但是需要记录上一次生成的是多少

0
螃蟹大叔
螃蟹大叔
//刚刚随便写了一下,不晓得是否能满足你的需求
(function (root, factory) {
    var NumberUtils = factory(root);
    if (typeof define === 'function' && define.amd) {
        // AMD
        // define([], factory);
        define('NumberUtils', function() { return NumberUtils; });
    } else if (typeof exports === 'object') {
        // Node.js
        module.exports = NumberUtils;
    } else {
        // Browser globals
        root.NumberUtils = NumberUtils;
    }
})(this, function (window) {
	var str = "cvbnmQWERT67890qwerjklzxYUIOPAStyuio12HJKLZXCV345pasdfghDFGBNM";
	return {
		SerialNum : function(len,c){
			var _id = 0;
			var _ch = c;
			var _modelNum=function(){
				var n = "";
				for(var i = 0;i<len-_id.toString().length;i++){
					n += _ch.toString();
				}
				return n;
			};
			return {
				nextNum :function(){
					_id = parseInt(_id, 10) + 1;
					return _modelNum()+_id;
				},
				nextInt : function(){
					_id = _id +1;
					return _id;
				}
			};
		},
		random:function(i){
			i += "";
			var result = "";
			for(var m=0;m<i.length;m++){
				result+=str[i[m]*6+parseInt(Math.random()*6,10)];
			}
			console.log(result);
			return result;
		},
		number:function(s){
			var result = "";
			for(var i=0;i<s.length;i++){
				result+=(parseInt(str.indexOf(s[i])/6,10)+"");
			}
			return result;
		}
		
	};
	});
	
	var pageSerialNum = NumberUtils.SerialNum(5,"0");
	for(var i=0;i<100;i++){
		var m = NumberUtils.random(pageSerialNum.nextNum());
		console.log("乱序字符串:"+m);
		console.log("原始字符串:"+NumberUtils.number(m));
	}



0
螃蟹大叔
螃蟹大叔

https://github.com/crab890715/SerialNumber.git

我把代码传到github了,你可以看一下,仿照实现java、python

0
eechen
eechen
5位数,范围是10000~99999,那数据库从10000开始自增不就可以了.比如给SQLite数据库的users表设置自增起始位置:
UPDATE sqlite_sequence
SET seq = 9999
WHERE name = 'users'
然后每次insert一条记录后用$db->lastInsertId()获取插入的自增ID.
表结构:
CREATE TABLE queue (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 user_id INTEGER UNIQUE
);
返回顶部
顶部