cdkey和激活码的生成
2015-07-06 19:25
127 查看
在很多产品中都有cdkey或者激活码需求,这就牵扯到cdkey的生成。cdkey(或激活码,后面已cdkey代替)一般都是由固定长度的一串数字和字母组成,生成的方法有很多,好比最简单的一种就是在26个字母和10个数字中随机抽取一个,然后重复N次,这样就生成了一个长度为N的cdkey。下面介绍一种简单实现的方法,直接上代码:
其实cdkey的生成就是这句“cdkey=`date +%s%N | md5sum | head -c ${CDKeyLen}`”,date +%s%N取当前时间的总秒数和纳秒,md5sum 对前面的数值做md5运算,head -c ${CDKeyLen}会取出md5生成的一串符号的前CDKeyLen位。代码的总体逻辑就是先生成一个cdkey,然后在数据库中查询这个cdkey有木有已经存在,如果不存在则插入数据库。
在这里想讨论的还有对mysql数据库的操作,代码第4行设置了访问数据库的各种参数,其中-h后跟数据库ip地址,-P后跟数据库端口,-u用户,-p密码,-D数据库名称,--default-character-set=utf8设置了字符集(如果不设置的话插入中文字符会乱码),-N表示返回的结果中取出了显示名称的那一行(就是第一行),-s表示简单显示结果,-e代表执行后面的语句。例如执行代码mysql -uroot -p123456 -Dmydb -e"select count(*) as count
from cdkey",结果会如下:
执行代码mysql -uroot -p123456 -Dmydb -N -e"select count(*) as count from cdkey",结果则是:
执行代码mysql -uroot -p123456 -Dmydb -N -s -e"select count(*) as count from cdkey",结果则是:
从上面的结果中可以很容易的看出-N和-s的作用。
1 #!/bin/sh 2 CDKeyLen=10 3 CDNum=10 4 MYSQLCmd="mysql -h127.0.0.1 -P3306 -uroot -p123456 -Dmydb --default-character-set=utf8 -N -s -e" 5 i=0 6 while((i<$CDNum)) 7 do 8 cdkey=`date +%s%N | md5sum | head -c ${CDKeyLen}` 9 cnt=$($MYSQLCmd "select count(*) from cdkey where key='$cdkey'") 10 if [[ $cnt == "0" ]]; then 11 i=$(($i+1)) 12 cdkeyid=$($MYSQLCmd "insert into cdkey(key,time) valuse('$cdkey', unix_timestamp(now()));select last_insert_id();") 13 echo $cdkeyid 14 fi 15 done
其实cdkey的生成就是这句“cdkey=`date +%s%N | md5sum | head -c ${CDKeyLen}`”,date +%s%N取当前时间的总秒数和纳秒,md5sum 对前面的数值做md5运算,head -c ${CDKeyLen}会取出md5生成的一串符号的前CDKeyLen位。代码的总体逻辑就是先生成一个cdkey,然后在数据库中查询这个cdkey有木有已经存在,如果不存在则插入数据库。
在这里想讨论的还有对mysql数据库的操作,代码第4行设置了访问数据库的各种参数,其中-h后跟数据库ip地址,-P后跟数据库端口,-u用户,-p密码,-D数据库名称,--default-character-set=utf8设置了字符集(如果不设置的话插入中文字符会乱码),-N表示返回的结果中取出了显示名称的那一行(就是第一行),-s表示简单显示结果,-e代表执行后面的语句。例如执行代码mysql -uroot -p123456 -Dmydb -e"select count(*) as count
from cdkey",结果会如下:
+-------+ | count | +-------+ | 5 | +-------+
执行代码mysql -uroot -p123456 -Dmydb -N -e"select count(*) as count from cdkey",结果则是:
+---+ | 5 | +---+
执行代码mysql -uroot -p123456 -Dmydb -N -s -e"select count(*) as count from cdkey",结果则是:
5
从上面的结果中可以很容易的看出-N和-s的作用。
相关文章推荐
- SOA 的基本概念及设计原则浅议
- 信庭嵌入式工作室-Linux系统Bootloader简介(回顾)
- SSL协议详解
- Linux C语言程序设计(二)——分支与循环
- 推荐系统资料汇总
- unity3d对象池的使用
- APIX招聘
- Linux中断(interrupt)子系统之五:软件中断(softIRQ)
- label相关的问题
- 判断scrollview是否滚动到了底部
- Mac 命令行删除包含文件的文件夹
- jsp项目部署到tomcat下的执行流程
- ZOJ 3826 Hierarchical Notation
- 获取操作系统位数失败之error C2065: 'PROCESSOR_ARCHITECTURE_AMD64' : undeclared identifier
- 八叉树 Octree
- c++中冒号(:)的作用
- 快速排序演示
- Number of 1 Bits
- 从医学的角度看恋爱
- C++中vector的排序问题