1.验证器代码

  1. <?php
  2.  
  3. namespace app\user\validate;
  4.  
  5. use think\Validate;
  6. use Potting\IDCard;
  7.  
  8. /**
  9. * 山区治理报名验证器
  10. * Class ActivityEnroll
    * @table qj_activity_enroll 验证器类名基于数据表名命名
  11. * @package app\user\validate
  12. */
  13. class ActivityEnroll extends Validate
  14. {
  15. protected $rule = [
  16. ['username', 'require|max:30'],
  17. ['mobile', 'require|checkMobile'],
  18. ['sex', 'require|number'],
  19. ['email', 'require|email|max:50'],
  20. ['birthday', 'require|date'],
  21. ['id_card', 'require|checkIDCard'],
  22. ['signature', 'require|max:50'],
  23. ['if_graduates', 'require'],
  24. ['if_volunteer', 'require'],
  25. ['service_city', 'require'],
  26. ['if_adjustment', 'require'],
  27. ['areaid', 'require'],
  28. ['salaryid', 'require'],
  29. ['tradeid', 'require'],
  30. ['positionname', 'require'],
  31. ['educationid', 'require|number'],
  32. ['schoolname', 'require|max:40'],
  33. ['major', 'require|max:40'],
  34. ['school_begintime', 'require|date'],
  35. ['school_endtime', 'require|date'],
  36. ['organic_name', 'require'],
  37. ['position_award', 'require'],
  38. ['inschool_begintime', 'require'],
  39. ['inschool_endtime', 'require'],
  40. ['inschool_description', 'require'],
  41. ['type', 'require'],
  42. ['skill_name', 'require'],
  43. ['description', 'require'],
  44.  
  45. ];
  46.  
  47. protected $field = [
  48. 'username' => '姓名',
  49. 'mobile' => '手机号码',
  50. 'sex' => '性别',
  51. 'email' => '邮箱',
  52. 'birthday' => '生日',
  53. 'id_crard' => '身份证',
  54. 'signature' => '座右铭',
  55. 'if_graduates' => '是否应届毕业生',
  56. 'if_volunteer' => '是否有志愿经历',
  57. 'service_city' => '可接受服务城市',
  58. 'if_adjustment' => '是否服从调剂',
  59. 'areaid' => '职业规划-意向城市',
  60. 'salaryid' => '职业规划-薪资范围',
  61. 'tradeid' => '职业规划-意向行业',
  62. 'positionname' => '职业规划-意向职位',
  63. 'educationid' => '教育经历-学历',
  64. 'schoolname' => '教育经历-学校名称',
  65. 'major' => '教育经历-专业',
  66. 'school_begintime' => '教育经历-入学时间',
  67. 'school_endtime' => '教育经历-毕业时间',
  68. 'organic_name' => '在校经历-组织名称',
  69. 'position_award' => '在校经历-担任职务',
  70. 'inschool_begintime' => '在校经历-加入时间',
  71. 'inschool_endtime' => '在校经历-结束时间',
  72. 'inschool_description' => '在校经历-工作内容',
  73. 'type' => '技能爱好类型',
  74. 'skill_name' => '技能名称',
  75. 'description' => '自我评价',
  76.  
  77. ];
  78.  
  79. /**
  80. * 检查身份证格式
  81. * @param $value|验证数据
  82. * @return bool|string
  83. */
  84. protected function checkIDCard($value){
  85. $IDCard = new IDCard();
  86. $result = $IDCard::isCard($value);
  87. if(!$result){
  88. return '身份证号码格式错误';
  89. }
  90. return true;
  91.  
  92. }
  93.  
  94. /**
  95. * 检查手机号码格式
  96. * @param $value |验证数据
  97. * @param $rule |验证规则
  98. * @param $data |全部数据
  99. * @return bool|string
  100. */
  101. protected function checkMobile($value)
  102. {
  103. $isMobile = is_mobile('+86'.$value);
  104. if (!$isMobile)
  105. return '手机号码格式错误';
  106. return true;
  107. }
  108.  
  109. }

2.第三方类库(验证身份证号码)

  1. <?php
  2.  
  3. namespace Potting;
  4. /**
  5. * 身份证处理类
  6. */
  7. class IDCard {
  8.  
  9. //检证身份证是否正确
  10. public static function isCard($card) {
  11. $card = self::to18Card($card);
  12. if (strlen($card) != 18) {
  13. return false;
  14. }
  15.  
  16. $cardBase = substr($card, 0, 17);
  17.  
  18. return (self::getVerifyNum($cardBase) == strtoupper(substr($card, 17, 1)));
  19. }
  20.  
  21. //格式化15位身份证号码为18位
  22. public static function to18Card($card) {
  23. $card = trim($card);
  24.  
  25. if (strlen($card) == 18) {
  26. return $card;
  27. }
  28.  
  29. if (strlen($card) != 15) {
  30. return false;
  31. }
  32.  
  33. // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
  34. if (array_search(substr($card, 12, 3), array('996', '997', '998', '999')) !== false) {
  35. $card = substr($card, 0, 6) . '18' . substr($card, 6, 9);
  36. } else {
  37. $card = substr($card, 0, 6) . '19' . substr($card, 6, 9);
  38. }
  39. $card = $card . self::getVerifyNum($card);
  40. return $card;
  41. }
  42.  
  43. // 计算身份证校验码,根据国家标准gb 11643-1999
  44. private static function getVerifyNum($cardBase) {
  45. if (strlen($cardBase) != 17) {
  46. return false;
  47. }
  48. // 加权因子
  49. $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
  50.  
  51. // 校验码对应值
  52. $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
  53.  
  54. $checksum = 0;
  55. for ($i = 0; $i < strlen($cardBase); $i++) {
  56. $checksum += substr($cardBase, $i, 1) * $factor[$i];
  57. }
  58.  
  59. $mod = $checksum % 11;
  60. $verify_number = $verify_number_list[$mod];
  61.  
  62. return $verify_number;
  63. }
  64. }
  65.  
  66. ?>

3.公共函数common.php代码部分(验证手机号码格式)

  1. //检测是否为手机号码
  2. function is_mobile($mobile)
  3. {
  4. try {
  5. $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
  6. $swissNumberProto = $phoneUtil->parse($mobile, "CH");
  7. $isValid = $phoneUtil->isValidNumber($swissNumberProto);
  8. } catch (\libphonenumber\NumberParseException $e) {
  9. return $e;
  10. }
  11. return $isValid;
  12. }

tp5服务器验证案例的更多相关文章

  1. Linux平台下Lotus Domino服务器部署案例

    Linux平台下Lotus Domino服务器部署案例 几年前我写了篇<RHAS2.1下安装中文LotusDominoR6.5图解>这篇文档被多个大型网站转载,曾帮助过很多公司系统管理员部 ...

  2. 苹果内购服务器验证之receipt返回多组in_app思考

    最近有部分用户反映,苹果内购充值失败,经过测试总结有几个关键点出现问题 1.app购买成功苹果没有返回票据,属于票据遗漏(取决于苹果服务器的响应状况),只能客户端进行监听刷新等处理 2.app连续购买 ...

  3. WebForm服务器验证控件与前端js自定义验证共同使用

        问题: 前端aspx页面中需要在button中添加OnClientClick事件后,这个OnClientClick所执行的自定义的客户端js验证:这个时候,所有的服务器验证控件都会失效!   ...

  4. Tp5自动验证

    <?php class DB { private $address = 'mysql.21future.com'; private $username = 'manbang'; private ...

  5. JAVA项目之苹果IAP内购JAVA服务器验证流程详解

    1.前言 本博客是经历过多个项目检验的, 绝对真实, 适应于对苹果iap内购稍微有些了解的JAVA开发人员,  认真看,  定能完美解决苹果内购问题. 苹果IAP内购支付实际上是"将客户端支 ...

  6. JavaScript 表单验证 案例

    JavaScript 表单验证 案例 版权声明:未经授权,严禁转载!   编写 HTML 文件,搭建主体界面 <html> <head> <meta charset=&q ...

  7. C++使用Socket 邮箱登录服务器验证

    转载:http://blog.csdn.net/zengraoli/article/details/36866241 转载:http://blog.csdn.net/alger_magic/artic ...

  8. 使用jquery插件validate制作的表单验证案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. ThinkPHP5.0框架开发--第10章 TP5.0验证器

    ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...

随机推荐

  1. Linux:磁盘配额

    磁盘配额 一.简略步骤显示 第一步:关闭虚拟机 第二步:编辑虚拟机设置--硬盘--添加 第三步:查看磁盘分区情况 fdisk -l 第四步:选择磁盘分区 fdisk /dev/sda2 第五步:选择磁 ...

  2. golang flag简单用法

    package main import ( "flag" "strings" "os" "fmt" ) var ARGS ...

  3. BZOJ 1083 [SCOI2005]繁忙的都市 (最小生成树裸题无重边) 超简单写法!!

    Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口 ...

  4. Spring Boot 揭秘与实战(九) 应用监控篇 - 自定义监控端点

    文章目录 1. 继承 AbstractEndpoint 抽象类 2. 创建端点配置类 3. 运行 4. 源代码 Spring Boot 提供的端点不能满足我们的业务需求时,我们可以自定义一个端点. 本 ...

  5. IPFS的配置安装

    目录 1. IPFS简介 2. IPFS本地环境安装 2.1 下载ipfs压缩包 2.2 安装 3. 项目配置 3.1 创建ipfs节点 3.2 修改节点默认存储空间 3.3 查看节点id 3.4 启 ...

  6. AMM调整为ASMM命令(关闭memory_target自动管理方式)

    客户生产系统,AIX oracle 11.2.0.4 数据库版本,2节点RAC. 操作系统内存,均为125G,调整前,使用oracle memory_target自动调整分配方式,memory_max ...

  7. OpenCV2类批量处理文件夹及文件图像 及批量处理后保存到txt文件

    //采用windows控制台实现计算文件夹中对象总数以及批量读取对象 //#include <afx.h> //和windows.h是一样的作用 #include <opencv2/ ...

  8. 线段树专题2-(加强版线段树-可持续化线段树)主席树 orz! ------用于解决区间第k大的问题----xdoj-1216

    poj-2104(区间第K大问题) #include <iostream> #include <algorithm> #include <cstdio> #incl ...

  9. [codeforces][Educational Codeforces Round 53 (Rated for Div. 2)D. Berland Fair]

    http://codeforces.com/problemset/problem/1073/D 题目大意:有n个物品(n<2e5)围成一个圈,你有t(t<1e18)元,每次经过物品i,如果 ...

  10. IDLE的使用

    为什么要用IDE? 到现在为止,我们也是写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择存放地点,执行时还要切换到命令行调用python解释器,好麻烦呀,能否一气呵成,让我简单 ...