案例:
- (1) 省份:42 湖北 , 43 湖南 , 11 北京
- (2) 市区 乡镇 4209
- (3) 出生年份:1986
- (4) 出生日期:0228
- (5) 顺序码:00
- (6) 倒数第二位 5 ,(奇数男、偶数女)
- (7) 最后一位:校验码,验证这个身份证号是不是瞎编的
分解代码:
读取性别
def getGender(idCard:String): String = {
val gender = idCard.substring(16,17).toInt
if(gender %2 == 0)
"女"
else
"男"
}
读取生日
def getBirthday(idCard:String): String = {
val year = idCard.substring(6,10)
val month = idCard.substring(10,12)
val day = idCard.substring(12,14)
year+"-"+month+"-"+day
}
读取籍贯
def getProvince(idCard: String): String = {
val procode = idCard.substring(0,2)
val provinceMap = Map(
"11" -> "北京市",
"12" -> "天津市",
"31" -> "上海市",
"50" -> "重庆市",
"13" -> "河北省",
"14" -> "山西省",
"15" -> "内蒙古自治区",
"21" -> "辽宁省",
"22" -> "吉林省",
"23" -> "黑龙江省",
"32" -> "江苏省",
"33" -> "浙江省",
"34" -> "安徽省",
"35" -> "福建省",
"36" -> "江西省",
"37" -> "山东省",
"41" -> "河南省",
"42" -> "湖北省",
"43" -> "湖南省",
"44" -> "广东省",
"45" -> "广西壮族自治区",
"46" -> "海南省",
"51" -> "四川省",
"52" -> "贵州省",
"53" -> "云南省",
"54" -> "西藏自治区",
"61" -> "陕西省",
"62" -> "甘肃省",
"63" -> "青海省",
"64" -> "宁夏回族自治区",
"65" -> "新疆维吾尔自治区",
"71" -> "台湾省",
"81" -> "香港特别行政区",
"82" -> "澳门特别行政区"
)
provinceMap.getOrElse(procode, "未知")
}
读取年龄
def getAge(idCard: String): Int = {
val year = idCard.substring(6, 10).toInt
val currentYear = LocalDate.now().getYear
currentYear - year
}
读取星座
def getZodiac(idCard:String): String = {
val month = idCard.substring(10,12).toInt
val day = idCard.substring(12,14).toInt
val zodiacs = Array("摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座")
val boundaries = Array(1222, 120, 219, 321, 420, 521, 622, 723, 823, 923, 1023, 1122)
val date = month * 100 + day
val index = boundaries.search(date).insertionPoint
zodiacs(index)
}
完整代码:
object string02 {
def getGender(idCard:String): String = {
val gender = idCard.substring(16,17).toInt
if(gender %2 == 0)
"女"
else
"男"
}
def getBirthday(idCard:String): String = {
val year = idCard.substring(6,10)
val month = idCard.substring(10,12)
val day = idCard.substring(12,14)
year+"-"+month+"-"+day
}
def getAge(idCard: String): Int = {
val year = idCard.substring(6, 10).toInt
val currentYear = LocalDate.now().getYear
currentYear - year
}
def getProvince(idCard: String): String = {
val procode = idCard.substring(0,2)
val provinceMap = Map(
"11" -> "北京市",
"12" -> "天津市",
"31" -> "上海市",
"50" -> "重庆市",
"13" -> "河北省",
"14" -> "山西省",
"15" -> "内蒙古自治区",
"21" -> "辽宁省",
"22" -> "吉林省",
"23" -> "黑龙江省",
"32" -> "江苏省",
"33" -> "浙江省",
"34" -> "安徽省",
"35" -> "福建省",
"36" -> "江西省",
"37" -> "山东省",
"41" -> "河南省",
"42" -> "湖北省",
"43" -> "湖南省",
"44" -> "广东省",
"45" -> "广西壮族自治区",
"46" -> "海南省",
"51" -> "四川省",
"52" -> "贵州省",
"53" -> "云南省",
"54" -> "西藏自治区",
"61" -> "陕西省",
"62" -> "甘肃省",
"63" -> "青海省",
"64" -> "宁夏回族自治区",
"65" -> "新疆维吾尔自治区",
"71" -> "台湾省",
"81" -> "香港特别行政区",
"82" -> "澳门特别行政区"
)
provinceMap.getOrElse(procode, "未知")
}
def getZodiac(idCard:String): String = {
val month = idCard.substring(10,12).toInt
val day = idCard.substring(12,14).toInt
val zodiacs = Array("摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座")
val boundaries = Array(1222, 120, 219, 321, 420, 521, 622, 723, 823, 923, 1023, 1122)
val date = month * 100 + day
val index = boundaries.search(date).insertionPoint
zodiacs(index)
}
def main(args: Array[String]): Unit = {
val idCard = "110723200609130000"
val gender = getGender(idCard)
val birthday = getBirthday(idCard)
val age = getAge(idCard)
val province = getProvince(idCard)
val zodiac = getZodiac(idCard)
println(
s"""
性别:${gender}
生日:${birthday}
籍贯:${province}
年龄:${age}
星座:${zodiac}
""")
}
}
代码运行:
