cdkey和激活码的生成

cdkey和激活码的生成

文章目錄

在很多产品中都有cdkey或者激活码需求,这就牵扯到cdkey的生成。cdkey(或激活码,后面已cdkey代替)一般都是由固定长度的一串数字和字母组成,生成的方法有很多,好比最简单的一种就是在26个字母和10个数字中随机抽取一个,然后重复N次,这样就生成了一个长度为N的cdkey。下面介绍一种简单实现的方法,直接上代码:

cdkey=`date +%s%N | md5sum | head -c ${CDKeyLen}`

#!/bin/sh

CDKeyLen=10

CDNum=10

MYSQLCmd="mysql -h127.0.0.1 -P3306 -uroot -p123456 -Dmydb --default-character-set=utf8 -N -s -e"

i=0

while((i<$CDNum))

do

cdkey=`date +%s%N | md5sum | head -c ${CDKeyLen}`

cnt=$($MYSQLCmd "select count(*) from cdkey where key='$cdkey'")

if [[ $cnt == "0" ]]; then

i=$(($i+1))

cdkeyid=$($MYSQLCmd "insert into cdkey(key,time) valuse('$cdkey', unix_timestamp(now()));select last_insert_id();")

echo $cdkeyid

fi

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的作用。

相关内容

三星手机丢了怎么找?教你几招快速定位!
365名品汇推荐码多少

三星手机丢了怎么找?教你几招快速定位!

⌛ 07-02 👁️ 5804
下游戏去哪里蹭网 推荐几个免费的游戏网吧
365上怎么买比分

下游戏去哪里蹭网 推荐几个免费的游戏网吧

⌛ 07-04 👁️ 948
威王洗衣机笔记
bst365大陆投注

威王洗衣机笔记

⌛ 07-07 👁️ 6049
盘点十二星座的车子是什么(12星座最适合开什么豪车)
365名品汇推荐码多少

盘点十二星座的车子是什么(12星座最适合开什么豪车)

⌛ 07-05 👁️ 6122
怎么用ps把腿p瘦
365名品汇推荐码多少

怎么用ps把腿p瘦

⌛ 06-28 👁️ 4578
同样是驴和马的后代,马骡和驴骡谁更厉害?为什么?
365名品汇推荐码多少

同样是驴和马的后代,马骡和驴骡谁更厉害?为什么?

⌛ 06-28 👁️ 5958