作者:王文青
开发工具与关键技术:VS+ASP.Net MVC
完成模块功能红旗标志如图:
一、功能实现
体检流程:填写病人信息 –》体检项目设置 –》收费 –》体检
数据库设计如下:
1:填写病人信息
填写身份证正则验证,然后绑定性别,出生年月
填写手机号需要正则验证
代码经典部分
手机号验证,输入不正确自动清空:
//验证手机号
function ipnone(hh, sj) {
var pattern = /^0{0,1}(1[0-9][0-9]|15[7-9]|153|156|18[7-9])[0-9]{8}$/;
if (hh.length == 11) {
} else {
sj.val("");
layer.alert("输入的手机不正确");
}
}
$("#ID").change(function () {
//获取手机号
var ip = $("#ID").val();
ipnone(ip, $("#ID"));
});
身份证正则+绑定信息
//判断身份证
$("#IDCardNo").change(function () {
//获取身份证
var idcode = $("#IDCardNo").val();
//var IDNumber = $("#IDCardNo").val();
layer.alert(checkIDCard(idcode));
//生日
birthday = idcode.substring(6, 10) + "-" + idcode.substring(10, 12) + "-" + idcode.substring(12, 14);
//三、计算年龄
currDate = new Date();
month = currDate.getMonth() + 1;
date = currDate.getDate();
age = currDate.getFullYear() - idcode.substring(6, 10) - 1;
currDate = new Date();
month = currDate.getMonth() + 1;
date = currDate.getDate();
age = currDate.getFullYear() - idcode.substring(6, 10) - 1;
//判断年龄
if (idcode.substring(10, 12) < month || (idcode.substring(10, 12) == month && idcode.substring(12, 14) <= date)) {
age++;
}
$("#Age").val(age);
$("#Birthday").val(birthday);
if (parseInt(idcode.substr(16, 1)) % 2 == 1) {
//男
sex = "man";
$("#AS_SexID").val(18)
} else {
//女
sex = "woman";
$("#AS_SexID").val(19)
}
});
// 函数参数必须是字符串,因为二代身份证号码是十八位,而在javascript中,十八位的数值会超出计算范围,造成不精确的结果,导致最后两位和计算的值不一致,从而该函数出现错误。
function checkIDCard(idcode) {
// 声明一个加权因子的数组
var weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
//声明一个校验码的数组
var check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var code = idcode;//声明参数加
var last = idcode[17];//获取字符串最后一个数字,校验位
// ISO 7064:1983.MOD 11-2身份证最后一位校验码的算法
// 判断最后一位校验码是否正确
var arr = code.substring(0, 17).split("");//截取code0到17位的字符
var len = arr.length;
var num = 0;
for (var i = 0; i < len; i++) {
num = num + arr[i] * weight_factor[i];
// 其中arr表示第i位置上的身份证号码数字值,weight_factor表示第i位置上的加权因子
//num 就是身份证和加权因子相乘的结果
}
// 获取余数
var resisue = num % 11;
var last_no = check_code[resisue];
// 格式的正则
// 正则思路
/*
第一位不可能是0
第二位到第六位可以是0-9
第七位到第十位是年份,所以七八位为19或者20
十一位和十二位是月份,这两位是01-12之间的数值
十三位和十四位是日期,是从01-31之间的数值
十五,十六,十七都是数字0-9
十八位可能是数字0-9,也可能是X
*/
var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
//var idcard_patter = /(^\d{17}(\d|X)$)|(^\d{15}$)/
// 判断格式是否正确
var format = idcard_patter.test(idcode);
// 返回验证结果,校验码和格式同时正确才算是合法的身份证号码
if (last == last_no && format) {
return "验证通过";
} else {
$("#IDCardNo").val("")
return "验证失败";
}
}
2:对体检病人设置体检项目
3:对体检项目进行收费
这里要判断是否收费,收完费则不可以进入这个界面
这里只针对直接来医院体检的收费
4: 进行体检(分为两种体检:1:直接来医院体检的。2:经过处方体检 )
二:开发总结
其实这个模块没有什么难度的,我做第一个项目,已经把计算收费,进行代码断点,明白其中的奥秘,正则这一块也是发费几节课搞定,学习只有不断的总结,不断的断点,弄懂流程,编码将会很快完成,每做一个项目,都有遇到的难点,思考难点,解决难点,这就是提升。不懂就要问,敢于提问,敢于思考问题,敢于尝试解决问题,总结是个好东西。