😘😘一个身份证,一串代码就可以测试星座物语💖💖
😎😎😎全篇可以直接复制粘贴运行就跑🤣🤣
😶🌫️(一)想要的东西😍
1.籍贯💖 2.性别
3.年龄 4.生日
5.星座 6性格:参考星座物语😘
😶🌫️(二)代码💖💖💖💖💖💖💖
import java.time.LocalDate
import java.time.format.DateTimeFormatter
object IDCardInfoExtractor {
// 1. 省级行政区划码(前2位)- 简化版籍贯映射
private val provinceCodeMap = Map(
"11" -> "北京市", "12" -> "天津市", "13" -> "河北省", "14" -> "山西省", "15" -> "内蒙古自治区",
"21" -> "辽宁省", "22" -> "吉林省", "23" -> "黑龙江省", "31" -> "上海市", "32" -> "江苏省",
"33" -> "浙江省", "34" -> "安徽省", "35" -> "福建省", "36" -> "江西省", "37" -> "山东省",
"41" -> "河南省", "42" -> "湖北省", "43" -> "湖南省", "44" -> "广东省", "45" -> "广西壮族自治区",
"46" -> "海南省", "50" -> "重庆市", "51" -> "四川省", "52" -> "贵州省", "53" -> "云南省",
"54" -> "西藏自治区", "61" -> "陕西省", "62" -> "甘肃省", "63" -> "青海省", "64" -> "宁夏回族自治区",
"65" -> "新疆维吾尔自治区", "71" -> "台湾省", "81" -> "香港特别行政区", "82" -> "澳门特别行政区"
)
// 2. 星座映射(月份+日期 -> 星座+性格)
private val constellationMap = List(
(12, 22, 1, 19, "摩羯座", "沉稳踏实、有责任感、坚韧不拔,做事有规划但略显保守"),
(1, 20, 2, 18, "水瓶座", "思维独特、追求自由、富有创意,待人友善但保持独立"),
(2, 19, 3, 20, "双鱼座", "感性细腻、富有同情心、浪漫温柔,易共情但偶尔优柔寡断"),
(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, "射手座", "乐观开朗、热爱自由、充满活力,随性洒脱但易浮躁")
)
def main(args: Array[String]): Unit = {
println("===== 身份证号信息提取工具 =====")
println("提示:输入'q'可退出程序\n")
while (true) {
val input = scala.io.StdIn.readLine("请输入18位身份证号:").trim
// 退出逻辑
if (input.equalsIgnoreCase("q")) {
println("程序已退出,再见!")
return
}
// 验证身份证长度
if (input.length != 18) {
println(s"❌ 错误:'$input' 不是合法身份证号(长度需为18位)\n")
}
try {
// 1. 提取籍贯(前2位省级编码)
val provinceCode = input.substring(0, 2)
val nativePlace = provinceCodeMap.getOrElse(provinceCode, "未知省份")
// 2. 提取性别(第17位:奇数男,偶数女)
val genderCode = input.substring(16, 17).toInt
val gender = if (genderCode % 2 == 1) "男" else "女"
val genderNickname = if (genderCode % 2 == 1) "小帅" else "小美"
// 3. 提取生日与年龄
// 提取生日(正确写法)
val birthYear = input.substring(6, 10).toInt // 出生年
val birthMonth = input.substring(10, 12).toInt // 出生月
val birthDay = input.substring(12, 14).toInt // 出生日
val birthday = s" birthYear年 birthMonth月 birthDay日" // 这里直接用变量名,不需要额外$
// 计算年龄(考虑未过生日的情况)
val today = LocalDate.now()
val birthDate = LocalDate.of(birthYear, birthMonth, birthDay)
var age = today.getYear - birthDate.getYear
if (today.isBefore(birthDate.plusYears(age))) {
age -= 1
}
// 4. 提取星座(根据生日匹配)
val (constellation, personality) = getConstellation(birthMonth, birthDay)
// 输出结果
println("\n===== 提取结果 =====")
println(s"🏠 籍贯:$nativePlace")
println(s"👤 性别:$gender($genderNickname)")
println(s"🎂 生日:$birthday")
println(s"🎈 年龄:$age 岁")
println(s"♓ 星座:$constellation")
println(s"💖 性格:$personality")
println("====================\n")
} catch {
case e: Exception =>
println(s"❌ 错误:解析失败(请输入合法数字组合的身份证号)\n")
}
}
}
// 辅助方法:根据生日匹配星座和性格
private def getConstellation(month: Int, day: Int): (String, String) = {
constellationMap.foreach { case (startMonth, startDay, endMonth, endDay, name, personality) =>
if (
(month == startMonth && day >= startDay) ||
(month == endMonth && day <= endDay)
) {
return (name, personality)
}
}
("未知星座", "暂未匹配到性格描述")
}
}
运行结果
===== 提取结果 =====
🏠 籍贯:四川省
👤 性别:女(小美)
🎂 生日: birthYear年 birthMonth月 birthDay日
🎈 年龄:18 岁
♓ 星座:白羊座
💖 性格:热情勇敢、积极乐观、行动力强,急性子但坦率真诚
====================
请输入18位身份证号: