身份证的基本信息
前2位是省市的信息;
后四位是具体的乡镇信息;
接下来8位是生日;
倒数第2位表示性别;
最后一位是校验码;
package string
import java.time.Year
object string03 {
def main(args: Array[String]): Unit = {
// 省份编码映射表(完整覆盖全国34个省级行政区)
val provinceCodeMap: Map[String, String] = Map(
"11" -> "北京市",
"12" -> "天津市",
"13" -> "河北省",
"14" -> "山西省",
"15" -> "内蒙古自治区",
"21" -> "辽宁省",
"22" -> "吉林省",
"23" -> "黑龙江省",
"31" -> "上海市",
"32" -> "江苏省",
"33" -> "浙江省",
"34" -> "安徽省",
"35" -> "福建省",
"36" -> "江西省",
"37" -> "山东省",
"41" -> "河南省",
"42" -> "湖北省",
"43" -> "湖南省",
"44" -> "广东省",
"45" -> "广西壮族自治区",
"46" -> "海南省",
"50" -> "重庆市", // 注意:重庆编码是50,不是30
"51" -> "四川省",
"52" -> "贵州省",
"53" -> "云南省",
"54" -> "西藏自治区",
"61" -> "陕西省",
"62" -> "甘肃省",
"63" -> "青海省",
"64" -> "宁夏回族自治区",
"65" -> "新疆维吾尔自治区",
"71" -> "台湾省",
"81" -> "香港特别行政区",
"82" -> "澳门特别行政区"
)
val constellationInfo: List[((Int, Int), (Int, Int), String, String)] = List(
((3,21), (4,19), "白羊座", "热情冲动、爱冒险,精力旺盛但有点急躁"),
((4,20), (5,20), "金牛座", "稳重务实、有耐心,固执且重视物质生活"),
((5,21), (6,21), "双子座", "聪明灵活、善沟通,好奇心强但容易善变"),
((6,22), (7,22), "巨蟹座", "敏感细腻、重感情,顾家且缺乏安全感"),
((7,23), (8,22), "狮子座", "自信开朗、爱面子,有领导力但有点骄傲"),
((8,23), (9,22), "处女座", "细心严谨、追求完美,挑剔且有强迫症"),
((9,23), (10,23), "天秤座", "优雅公正、善社交,纠结选择困难症"),
((10,24), (11,22), "天蝎座", "神秘腹黑、占有欲强,深情且记仇"),
((11,23), (12,21), "射手座", "乐观自由、爱旅行,粗心且缺乏耐心"),
((12,22), (1,19), "摩羯座", "沉稳内敛、有野心,固执且不懂浪漫"),
((1,20), (2,18), "水瓶座", "特立独行、爱创新,疏离且想法奇特"),
((2,19), (3,20), "双鱼座", "温柔浪漫、爱幻想,敏感且容易情绪化")
)
while (true){
val str = scala.io.StdIn.readLine("请输入你要判断的身份证号:")
//判断是否为18位
if(str.length == 18){
//性别
val x = str.substring(16,17)//获取倒数第二位
val y = x.toInt//将倒数第二位变为数字,并判断奇偶,奇为男,偶为女
if (y % 2 ==1){
println("这是一个大帅哥")
}else{
println("这是一个小姑娘")}
//判断年龄
val n = str.substring(6,10)//从身份证中获取出生年份
val m =n.toInt//将出生年份转换为数字
val age= Year.now().getValue() - m //当前年份( Year.now().getValue())-出生年份
println(s"年龄为${age}岁")
//判断省份
val provinceCode = str.substring(0,2)//从身份证中获取省份
val province = provinceCodeMap.getOrElse(provinceCode, s"未知省份(编码:$provinceCode)")
println(s"所属省份:$province")
//判断星座
val birthMonth = str.substring(10, 12).toInt // 提取出生月份(第11-12位)
val birthDay = str.substring(12, 14).toInt // 提取出生日期(第13-14位)
// 遍历星座列表匹配
var constellation = "未知星座"
var traitDesc = "无性格信息"
for (((startM, startD), (endM, endD), name, traitStr) <- constellationInfo) {
if (startM <= endM) {
// 同年度区间(如3.21-4.19)
if ((birthMonth == startM && birthDay >= startD) ||
(birthMonth == endM && birthDay <= endD) ||
(birthMonth > startM && birthMonth < endM)) {
constellation = name
traitDesc = traitStr
}
} else {
// 跨年度区间(如12.22-1.19)
if ((birthMonth == startM && birthDay >= startD) ||
(birthMonth == endM && birthDay <= endD)) {
constellation = name
traitDesc = traitStr
}
}
}
println(s"星座:$constellation")
println(s"性格特点:$traitDesc")
}else{
println(s"${str}不是一个合法的身份证号,长度不对")
}
}
}
}