如何快速生成数字类型的兑换码,又能防止别人盲猜呢?没错带有验证真伪性的数字,比如身份证真伪验证

本贴最后更新于 1588 天前,其中的信息可能已经事过境迁

工作中,经常会遇到兑换码功能的需求开发,这时候就会有各种问题

  • 字母数字组合不好输入
  • 纯数字兑换码容易被盲猜
  • 其他问题

今天我们主要介绍一种带有真伪验证的数字兑换码生成方案。

真伪检测 code 创建代码

/** * 创建带有真伪性验证的数字 * @param int $code 原始数字 * @param int $int_key 加密key(必须大于0,小于$code) * @return int 结果数字比原数字长2位 */ function create_code($code,$int_key){ $num = 0;$m = '5194268037';$n = '3061758429'; foreach (range(0,strlen($code)-1) as $k=>$v){ $num = $num + $code[$k]; } $num = $num % intval($code/$int_key); $num = substr(sprintf('%02s', $num),-2); return $code.$m[$num[0]].$n[$num[1]]; }

真伪检测 code 检测代码

/** * 验证带有真伪性验证的数字的真伪性 * @param int $code 原始数字 * @param int $int_key 加密key(必须大于0,小于$code) * @return boolean */ function check_code($code,$int_key){ $tmp_code = substr($code,0,14); $num = 0;$m = '5194268037';$n = '3061758429'; foreach (range(0,strlen($tmp_code)-1) as $k=>$v){ $num = $num + $tmp_code[$k]; } $num = $num % intval($tmp_code/$int_key); $num = substr(sprintf('%02s', $num),-2); $check_code = $tmp_code.$m[$num[0]].$n[$num[1]]; if($check_code == $code){ return true; }else{ return false; } }

测试使用

$str = '51650112989957'; //var_dump($str[0],$str[1]); echo '<pre>'.$str.'<br />'; $int_key = 125637812; $new_str = create_code($str,$int_key); var_dump($new_str); $check = check_code($new_str,$int_key); var_dump($check);

一些说明

  • 创建出来的 code 要比原来的数字多 2 位
  • init_key 是会被除被取余的,所以不能是 0,也不能大于 code,因为取余后还要被除
  • 方法里面的n 其实就是 0~9 的排序,这个自己可以随意定义,目的就是让用户不好猜测,避免用户能简单算到的情况发生。

由于打到车了,今天的分享就草草结束吧!
其实算法类似身份证真伪验证那样,可以自己随意书写里面的真伪算法哦
再见!

  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    180 引用 • 408 回帖 • 489 关注
  • 真伪验证
    1 引用
  • 身份证真伪
    1 引用
1 操作
ieras 在 2020-12-17 20:59:38 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...