【nodejs】用户随机不重复抽奖码生成

要求

抽奖活动,用户注册的有唯一的手机号,根据手机号生成一个唯一且对应的抽奖码

实现

随机码生成

先不管随机码是否重复,写一个根据电话来生成10位随机字符串的函数

...
let crypto = require('crypto') //引用加密模块
...
/*
* 根据一个盐值加密生成随机的字符串
* @function
* @param {string} source 要转换的字符串
*/
const sha512 = function(source, salt){
	const hash = crypto.createHmac('sha512', salt) // 盐值
	hash.update(source)
	const value = hash.digest('hex')
	console.log(value)
	return {
		salt: salt,
		Hash: value
	}
}
/*
* 根据电话号 返回一个10位随机加密字符串的方法
* function 
* @param {string} phone
*/
function initCode(phone) {
	let now = new Date().getTime().toString()
	console.log('time')
	console.log(now)
	let code = sha512(phone, now) // 这里使用了timestemp作为盐值,让生成的抽奖码更不随机
	return code.Hash.substr(3,10) // 如果需要更多位 可以多截取一些,也可以从不同位置截取
}

要实现不重复 就要用到数据库查询
只要查询到一个重复的就重新生成一个,这里用递归实现了

/*
* 一个方法用于生成不重复的字符串
* @function
* @param {string} phone - 用户手机号
* @param {function} callback - 回调函数
* */
function getUnicCode(phone,callback){
	let code = initCode(phone)
	connection.query('SELECT token FROM usersignup WHERE token = ? LIMIT 1', [code], function(err, result) { 
		if(err){
			console.log('查询出错')
			console.log(err)
		} else if(result.length <= 0) {
			console.log('不重复的token')
			callback(code) // 回调将附带生成的10位随机字符串
		} else {
			console.log('重复的token')
			getUnicCode(phone,callback) // 重新生成
		}
	})
}

上面我的数据表是usersignup, token字段就是抽奖码

角角兔towrabit头像缩放100宽度

  • 这里是角角兔 towrabbit
  • 欢迎点赞评论哦
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值