当前位置: 首页 > news >正文

vue3 身份证校验、识别性别/生日/年龄

表单项绑定 @change 事件

<template><el-form ref="employeeFormRef" :model="form" :rules="rules" label-width="120px"><el-form-item label="身份证号" prop="idCardNo"><el-input v-model="form.idCardNo" placeholder="请输入身份证号" @change="idCardNoChange" /></el-form-item><el-form-item label="出生日期" prop="dateOfBirth"><el-date-picker clearablev-model="form.dateOfBirth"type="date"value-format="YYYY-MM-DD"placeholder="请选择出生日期"></el-date-picker></el-form-item><el-form-item label="年龄" prop="age"><el-input v-model="form.age" placeholder="请输入年龄" /></el-form-item><el-form-item label="性别" prop="sex"><el-select v-model="form.sex" placeholder="请选择性别"><el-optionv-for="dict in sys_user_sex":key="dict.value":label="dict.label":value="dict.value"></el-option></el-select></el-form-item></el-form>
</template>

 定义身份验证规则

const isIdCardNo = (rule, value, callback) => {var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码if (/^\d{17}\d|x$/i.test(value)) {var sum = 0, idx;for (var i = 0; i < value.length - 1; i++) {// 对前17位数字与权值乘积求和sum += parseInt(value.substr(i, 1), 10) * arrExp[i];}// 计算模(固定算法)idx = sum % 11;// 检验第18为是否与校验码相等if (arrValid[idx] == value.substr(17, 1).toUpperCase()) {callback()} else {form.value.sex = '';form.value.dateOfBirth = '';form.value.age = '';callback("身份证格式有误");}} else {form.sex = '';form.dateOfBirth = '';form.value.age = '';callback("身份证格式有误");}
};const data = reactive<PageData<EmployeeForm, EmployeeQuery>>({rules: {idCardNo: [{ required: true, message: "身份证号不能为空", trigger: "blur" },{	//调用定义的方法校验格式是否正确validator: isIdCardNo, trigger: "blur"}],}
});

 识别性别、出生日期

// 身份证识别性别出生日期
const idCardNoChange = () => {const reg =/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;if (reg.test(form.value.idCardNo)) {let org_birthday = form.value.idCardNo.substring(6, 14);let org_gender = form.value.idCardNo.substring(16, 17);let sex = org_gender % 2 == 1 ? "0" : "1";let birthday =org_birthday.substring(0, 4) +"-" +org_birthday.substring(4, 6) +"-" +org_birthday.substring(6, 8);form.value.sex = sex;form.value.dateOfBirth = birthday;form.value.age = ageValue(birthday).age;} else {return false;}
};

通过出生日期计算年龄

/*** 获取年龄* @param val* @returns {{month: unknown, day: unknown, age: unknown}}*/
const ageValue= (val?: String) => {// 新建日期对象let date = new Date()// 今天日期,数组,同 birthdaylet birthdayDate = new Date(val)let birthday = [birthdayDate.getFullYear(), birthdayDate.getMonth(), birthdayDate.getDate()]let today = [date.getFullYear(), date.getMonth() + 1, date.getDate()]// 分别计算年月日差值let age = today.map((value, index) => {return value - birthday[index]})// 当天数为负数时,月减 1,天数加上月总天数if (age[2] < 0) {// 简单获取上个月总天数的方法,不会错let lastMonth = new Date(today[0], today[1], 0)age[1]--age[2] += lastMonth.getDate()}// 当月数为负数时,年减 1,月数加上 12if (age[1] < 0) {age[0]--age[1] += 12}return {age:age[0],month:age[1],day:age[2]}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MMGPL: 多模态医学数据分析与图提示学习| 文献速递-基于深度学习的多模态数据分析与生存分析
  • 如何找回误删的文件?4个常用文件恢复方法!
  • 『C++成长记』vector模拟实现
  • RequestContextHolder多线程获取不到request对象
  • 基于springboot+vue+uniapp的机电公司管理信息系统
  • Llama-factory源码详细解读
  • 192.168.1.1路由器管理系统使用教程
  • 在linux x86服务器安装jdk
  • Sentinel和hystric的运用详解
  • C#实现最短路径算法
  • 记录些Redis题集(1)
  • mysql历史记录
  • Tomcat底层原理
  • 机器学习——关于极大似然估计法的一些个人思考(通俗易懂极简版)
  • 超详细版阿里云控制台环境配置+数据库配置
  • 深入了解以太坊
  • #Java异常处理
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 11111111
  • Invalidate和postInvalidate的区别
  • Laravel核心解读--Facades
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Terraform入门 - 3. 变更基础设施
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vim 折腾记
  • Vue 2.3、2.4 知识点小结
  • 从重复到重用
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 微服务核心架构梳理
  • 以太坊客户端Geth命令参数详解
  • 再谈express与koa的对比
  • 怎么把视频里的音乐提取出来
  • 怎样选择前端框架
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​学习一下,什么是预包装食品?​
  • #《AI中文版》V3 第 1 章 概述
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #数据结构 笔记三
  • (16)Reactor的测试——响应式Spring的道法术器
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (回溯) LeetCode 78. 子集
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)【Hibernate总结系列】使用举例
  • (转)大道至简,职场上做人做事做管理
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ./configure、make、make install 命令
  • .NET Standard 的管理策略
  • .Net 代码性能 - (1)
  • .NET命令行(CLI)常用命令
  • @Import注解详解