一、如何通过身份证号码计算当前用户的年龄
计算规则:先取出身份证上的年份并计算年份与当前年份的差,再比较当前日期与身份证上的月日(即判断此人是否已经过了国历生日),决定是否需要减去一岁,已经过了生日的就不用减掉了。
1、先计算当前年份与与出生年份的差值
- 通过substring() 函数取出生年月、身份证号从第七位开始是出生年月,取四位
- substring(idcard,7,4)
- 当前月份,通过now()函数获取
- substring(now(),1,4):当前年份是2022年
- 减法求当前年份到出生年份之间差值
- substring(now(),1,4)-substring(idcard,7,4)
2、比较当前日期与身份证号上的日期,判断是否已经过了生日,来决定是否用当前年龄年月减去1。已经过完生日的不需要减
- 获取当前月份天数,通过date_format() 函数
- date_format(now(),'%m%d')
- 取身份证号上的出生日期,从第十一位开始,取四位
- substring(idcard,11,4)
- 做减法,计算当前日期与出生日期的差值,如果大于0,说明,说明已经过过生日,则年月不用减一
- if(DATE_FORMAT(NOW(),'%m%d')-SUBSTRING(idcard,11,4)>0,0,1 )
3、完整sql
(substring(NOW(),1,4) - SUBSTRING(idcard,7,4) - (if(DATE_FORMAT(NOW(),'%m%d')-SUBSTRING(idcard,11,4)>0,0,1 ) ) ) as 'age'
二、身份证号码取性别
15位身份证号码:第15位代表性别,奇数为男,偶数为女
18位身份证号码:第17位代表性别,奇数为男,偶数为女