有趣的星座物语💖💖😎小代码

28 阅读3分钟

😘😘一个身份证,一串代码就可以测试星座物语💖💖

😎😎😎全篇可以直接复制粘贴运行就跑🤣🤣

OIP-C.webp

😶‍🌫️(一)想要的东西😍

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位身份证号: