如何生成假的跟真的似得订单编号

jiaoshiyao 2015-06-27 05:12:51
原谅我牛逼的标题
我看到的订单编号几乎都是
XXXX201506270001
XXXX是业务前缀,20150627是日期,0001是一个自增的一个ID。
但是公司的业务不想让别人知道有多少个订单。
那么就是后面的0001不能要了,这个要怎么弄。
...全文
1445 49 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
smthgdin_020 2015-07-01
  • 打赏
  • 举报
回复
写个算法对后面4位进行转换后再显示,程序内部可以反向转换回来。或者数据库加个字段用于显示给外面的人看,真正的订单号字段不显示,记得要避免sql注入。
  • 打赏
  • 举报
回复
如果业务人员说“你随便吧,只要不重复就行”,那么你可以先生成上万个编号以随机的顺序放到你的库里(但是这不叫随机编号,只能算是流水号的随机排序)备用。 如果业务人员不认为这样更方便于订单管理,那么还是别再往更技术化的角度去考虑了!
  • 打赏
  • 举报
回复
如果要“完全无规律”,那么既然可以这么长的id,使用GUID岂不是更好吗?显然,这个id是要求有相当多的“可读”的字符的,而真正表示变动的id的部分留出的位置很少。这是一个前提。 流水号不论是发号还是审计(例如检查某人负责的业务有没有作弊)都非常轻量,对用户友好。所以所谓“假的跟真的似的订单编号”只能从业务角度考虑,让业务人员来设计,而最好不要用“纯技术人员的脑袋”去想这个问题。
i疾风 2015-07-01
  • 打赏
  • 举报
回复
引用 47 楼 Z65443344 的回复:
如果只是想看销量,完全可以数据库里做个统计查询就查询出销量了,不用在编号上做什么文章 楼主的目的不就是不想通过编号看出销量吗
我觉得楼主并不是想数字完全无规律生成,所以我的方法也没错啊
gengchenhui 2015-07-01
  • 打赏
  • 举报
回复
知道你有多少订单?人家怎么知道你今天最后一单那xxxx是多少啊?难不成还有人每天晚上12点之前去一下你们系统,然后生成一个订单编号看看???即使是这样,中间有多少个订单是已经支付的,多少个是没有支付的,他都能获取到?
於黾 2015-07-01
  • 打赏
  • 举报
回复
引用 46 楼 qq283426694 的回复:
你是在考算法题吗,莫名的就想到了哈希算法的平方取中法。 你这么臭屁的要求,一共只有四位数供存储,还要考虑一秒处理1000个的情形,所以后续业务的增长不知道会是多少。 废话说完说正事: 我个人认为你的想法是不想让外人知道这个订单号的含义,或者通过这个订单号了解你们的销量。 那么你们代码里生成的仍然可以是0001,0002,0003之类的数字,利用hash算法或者其他什么函数处理一下取结果作随机数。如果函数可逆,你们自己可通过结果反推元数字,若 不可逆,亦可通过一个个的去算并且比对结果来确定当天的销量。 用什么算法以及具体值不值得,看实际情况楼。楼主这么流弊,妥妥的是看不上哈希算法的,自己想个流弊的可逆函数是最好的解决方案了~
如果只是想看销量,完全可以数据库里做个统计查询就查询出销量了,不用在编号上做什么文章 楼主的目的不就是不想通过编号看出销量吗
i疾风 2015-07-01
  • 打赏
  • 举报
回复
你是在考算法题吗,莫名的就想到了哈希算法的平方取中法。 你这么臭屁的要求,一共只有四位数供存储,还要考虑一秒处理1000个的情形,所以后续业务的增长不知道会是多少。 废话说完说正事: 我个人认为你的想法是不想让外人知道这个订单号的含义,或者通过这个订单号了解你们的销量。 那么你们代码里生成的仍然可以是0001,0002,0003之类的数字,利用hash算法或者其他什么函数处理一下取结果作随机数。如果函数可逆,你们自己可通过结果反推元数字,若 不可逆,亦可通过一个个的去算并且比对结果来确定当天的销量。 用什么算法以及具体值不值得,看实际情况楼。楼主这么流弊,妥妥的是看不上哈希算法的,自己想个流弊的可逆函数是最好的解决方案了~
  • 打赏
  • 举报
回复
随机数不能尽量避免重复,这方面完全不可控,因此不能使用。
比喻时光 2015-07-01
  • 打赏
  • 举报
回复
引用 40楼sanbo_xyz 的回复:
最好是全部使用随机数,生成时候不要立即用,保存本地数据库,也方便下次比对,也好内部查询
这样会不会效率很慢啊…
派大奇 2015-07-01
  • 打赏
  • 举报
回复
guid guid guid guid
qq_14813531 2015-07-01
  • 打赏
  • 举报
回复
学到了,谢谢
caoqinghua 2015-07-01
  • 打赏
  • 举报
回复
GUID.ToString().GetHashCode() 生成guid后直接去哈希,这个是随机的,重复的概率基本可以说是没有
mc9s12xs 2015-06-30
  • 打赏
  • 举报
回复
最后的换成时间
by_chance 2015-06-30
  • 打赏
  • 举报
回复
为什么不用时间戳。。。。。
sanbo_xyz 2015-06-30
  • 打赏
  • 举报
回复
最好是全部使用随机数,生成时候不要立即用,保存本地数据库,也方便下次比对,也好内部查询
  • 打赏
  • 举报
回复
一种办法是在id生成上做处理,比如我们用过的每天通过job生成当天的所有订单编号集合,然后每次生成订单时,去这个集合里面随机取出一条作为主键 还有一种办法是,生成规则不变,但可以利用短网址的方式来显示调用
WM_JAWIN 2015-06-29
  • 打赏
  • 举报
回复
0001 * 30 + Random.Nex(10) 有规律,别人也猜不出订单数
Yun__ 2015-06-29
  • 打赏
  • 举报
回复
写一组mapping 然后分配type 每个type一种算法,这样产生出来的都可以是数字 但是完全是没有规则的 或者可以先将编号分配好了,写在数据库或者文本中,每次随机取走一行,然后删除,用完再次补充.
於黾 2015-06-29
  • 打赏
  • 举报
回复
而且如果是固定4位,随机增长很快就满了,然后就会产生重复
於黾 2015-06-29
  • 打赏
  • 举报
回复
引用 35 楼 effun 的回复:
流水号的增长不一定是要1啊,也可以是2,也可以是100,每次随机增长,即不会重复,也猜不出来业务量。
但是总是会有个规律 比如每次取1-100之间的随机数,那么平均就是50,大体还是能够猜出业务量 这个随机数总归是有个范围,不大可能无限增长吧
加载更多回复(29)

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧