某产品的用户注册邀请码为一串有小写字母和数字组成的字符串,字符串长度为16,当用户数据邀请码的时候,系统需要对邀请码做有效性验证,假设验证规则如下:
1、从序列号最后一位字符开始,逆向将奇数位(1、3、5等等)相加
2、从序列号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和
3、将奇数位总和加上偶数位总和,结果可以被10整除
4、小写字母对应数值,可由下面键值对确定;
[(a,1),(b,2),(c,3)…,(i,9),(j,1),(k,2)…],亦即,按字母顺序,1-9循环。
输入:输入16位字符串,表示邀请码
输出:输出"ok" 或者"error"
这样的设计 除了为难自己 没有任何实际意义
这里的关键不是校验规则,而是邀请码的唯一性,不同用户的邀请码应该是永不重复的。
/**
* @Title: verificationCode
* @Description: 假设场景为A邀请B注册:
实现方案应该是这样的:
B填写A给定的字符串,
判断是否一致,通过允许注册,
否则不允许注册。规则无所谓,
不用把简单问题复杂化
* @author: 徐蜀黍
* @date: 2021年2月19日 下午6:24:53
* @param code B填写的邀请码
* @return
*/
public String verificationCode(String code) {
//这里用UUID模拟用户A邀请码
String a_code = UUID.randomUUID().toString().replaceAll("-", "");
return code.equals(a_code)?"ok":"error";
}