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

  1 #!/bin/sh2 CDKeyLen=103 CDNum=104 MYSQLCmd="mysql -h127.0.0.1 -P3306 -uroot -p123456 -Dmydb --default-character-set=utf8 -N -s -e"5 i=06 while((i<$CDNum))7 do8     cdkey=`date +%s%N | md5sum | head -c ${CDKeyLen}`9     cnt=$($MYSQLCmd "select count(*) from cdkey where key='$cdkey'")10     if [[ $cnt == "0" ]]; then11         i=$(($i+1))12         cdkeyid=$($MYSQLCmd "insert into cdkey(key,time) valuse('$cdkey', unix_timestamp(now()));select last_insert_id();")13         echo $cdkeyid14     fi15 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的作用。

cdkey和激活码的生成相关推荐

  1. 生成16位卡号和激活码

    生成16位不重复数字,每四位"-"隔开 16位卡号 工具类(规则可自己修改生成) 用例 卡号(16位数字,每4位之间用-隔开) 激活码(12位数字+随机字母) 16位卡号 工具类( ...

  2. 如何设计和生成游戏的激活码

    游戏的激活码,也叫作奖励码.兑换码,通常是由字符和数字组成的字符串,用于在游戏的推广阶段发放给玩家,玩家在下载登录游戏之后兑换获得相应的奖励. 首先设计我们激活码的规则 字符 + 数字 组成 长度待定 ...

  3. mac charles永久激活码

    Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 https://charles.wrbug.com charles ...

  4. python生成激活码

    github上的小练习啦,生成激活码,并且保存到mysql数据库中,代码: #coding=utf-8 import uuid import pymysql ''' uuid库生成128位全局唯一标识 ...

  5. php生成 优惠券 激活码

    /*** 生成vip激活码* @param int $nums 生成多少个优惠码* @param array $exist_array 排除指定数组中的优惠码* @param int $code_le ...

  6. UUID生成唯一激活码

    // 使用UUID生成激活码UUID uuid = UUID.randomUUID();String activeCode = uuid.toString().replace("-" ...

  7. python 生成激活码 (指定数量以及指定长度)

    import random, string#引用两个模块 def rand_str(num, length):#这里的num用于指定数量,length用于指定长度 f = open("/Us ...

  8. 随机生成11位激活码

    小Z最近在做商城模块,其中有Coupon代金券支付的功能,这里面涉及到激活码生成的问题,现在约定的是随机产生数字的11位激活码,因为用户在手机上输入数字英文混合的激活码是非常不方便的一件事情(有种方法 ...

  9. php 生成8位数唯一的激活码

    /** *生成激活码 */ function showGenerationActivationCode(){ #渠道类型id $channel_id=$_POST['channel']; #根据渠道i ...

最新文章

  1. 不试过你怎么知道?开博第一篇(本人菜鸟也,高手可以飘过)
  2. 蚂蚁金服-支付风险识别亚军方案!
  3. layui使用方法——图标
  4. python怎么使用json_Python JSON的简单使用
  5. JVM—堆栈 堆 方法区 静态区 final static 内存分配
  6. Will not attempt to authenticate using SASL | dubbo项目启动特别慢,拉取 zookeeper 服务日志打印特别慢
  7. Python 3.8.3 发布
  8. 基于概率的项目相似度之并行方法
  9. 开源软件许可协议简介
  10. 网络暴利行业,天龙私服赚千万是不是梦想?
  11. 外贸中一些单词的缩写
  12. Python去除文本所有标点符号
  13. 游戏引擎设计 - 物理(Crapell Game Engine Design - physic)
  14. 从钉钉后台对接考勤打卡信息(仅供参考)
  15. Vlan 单线复用之复式二层住宅网络改造实操案例(一)
  16. 【计息日期】国债逆回购类产品的起息日期和兑付日期,如何用python优雅实现?~
  17. iptables目标TTL
  18. 2021水利水电安全员模拟考试多选题库及答案
  19. 【简易】微信小程序日期Date的加减
  20. Java设计模式——单例模式

热门文章

  1. ccfcsp201903-2 24点游戏
  2. 根据城市名称检索城市ID,以及省市县(LitePal+RxJava+Retrofit)
  3. php link rel= icon,link
  4. ant design pro模板_Ant Design Pro入门教程,安装,运行(V5 Typescript版)
  5. 软件工程工作量评估中的ILF,EIF,EI,EO,EQ术语解释
  6. 【kafka可视化工具】kafka-eagle在windows环境的下载、安装、启动与访问
  7. DSCTF2022 fuzzerinstrospector-Wp
  8. 怎么用linux查看xml文件格式,xml是什么格式?xml文件格式用什么软件可以打开
  9. 关于Codeforce
  10. sql 同时(更新)update和(查询)select同一张表