[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]关于充值卡的卡号和密码的生成。

上一篇:[备忘]IE中兼容文档模式x-ua-compatible的写法
下一篇:[备忘]HTML方式导出Excel文件,数字变科学计数法,解决方法

添加日期:2014/9/19 6:45:24 快速返回   返回列表 阅读3094次
卡号,用户可见,所以无所谓,只好不重复,连续或不连续均可。

我最后是这么搞的。


    /**
     * 生成充值卡前缀.
     */
    private String getCardPreStr() {
        
        //16位卡号,第一位固定9,+6位hhmmss,+4位随机数,+5位顺序号
        //9 045803 1342 00001
        SimpleDateFormat f = new SimpleDateFormat("hhmmss");
        return "9" + f.format(new Date())+CommonUtil.getRandomNumString(4);
    }



用“时分秒”+4位随机数,基本可以保证不重复了。
5位顺序号,单次可以做99999张卡,让他们卡号连续。
-----------------------------------
至于密码的生成,我是这样想的,不管你用什么NB的算法,最后密码的位数在那放着呢,

穷举的危险是一样的,故,干脆,直接随机数即可。

密码位数越多越好,我这里用的是16位,那么穷举的话,最大尝试次数是10的16次方,是一亿亿次?。

密码还要防止的是,被人发现规律,根据一组密码,猜测出别的密码。

咱这是随机数,没有规律~~所以也无此危险。

虽然是16位,但重复的可能性还是有,但很渺茫了。

故没有采用生成一个,就检查一次的办法。

可以在插入DB后,用自身inner join 检查一下即可,

如:


SELECT count(*)
from recharge_card a inner join recharge_card b
on a.card_password = b.card_password
and a.card_no <> b.card_no


结果是0,就表示无重复。即使有重复,估计也就1条,删掉,重新生成即可。
--------------------------
另外,充值时,可以按卡号+密码的形式进行匹配,即使密码重复也无所谓,仍然可以定位到一条记录。

用户知道自己的密码有重复,并知道另外一张卡号,基本不可能哈~~
----------------------------
充值时,可以增加图形验证码,要求用户登录,限制每天充值次数,限制用户尝试次数。

当然,如果NB的人,注册N个账户,还会换IP,还会识别验证码,穷举的话,

那么,服务端最好延迟1秒返回结果,

1秒,尝试1亿次的话,是1亿秒,大概是1157天,大概3年。

开1万个线程的话,大概3个小时。

也就是说,固定卡号的话,乐观尝试1亿次,开1万个线程,大概3小时,可能收获300元。

一天2400元,也不错,高收益啊~~

不乐观点的话,尝试1000亿次,一天收获两块四,妈的,不够交电费。
-----------------------------------------------

 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved