案例,拆分身份证号的秘密

4 阅读1分钟
def getGender(idCard:String):String = {
  val g = idCard.substring(16,17).toInt
  if (g % 2 == 1){
    "男"
  } else {
    "女"
  }
}
def main(args: Array[String]): Unit = {
  val idCard = "429005200410100053"

  val gender = getGender(idCard)
  val brithday = "10-10"
  val age = 21
  val province = "湖北"
  val zodiac = "天秤座"

  println(s"---------------------------------")
  println(s"籍贯:${province}")
  println(s"性别:${gender}")
  println(s"年龄:${age}")
  println(s"生日:${brithday}")
  println(s"星座:${zodiac}")
  println(s"---------------------------------")
}
--------------------------------------------------------------
修改后,代码如下:
def getGender(idCard:String):String = {
  val g = idCard.substring(16,17).toInt
  if (g % 2 == 1){
    "男"
  } else {
    "女"
  }
}
def getProvince(idCard:String):String = {
  val code = idCard.substring(0,2)
  val map = 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"->"澳门特别行政区")
  map.getOrElse(code,"未知")}
def getAge(idCard: String):Int = {
  val year = idCard.substring(6,10)
  LocalDate.now().getYear - year.toInt
}
def getBirthday(idCard: String): String = {
  val month = idCard.substring(10,12)
  val day = idCard.substring(12,14)
  month + "-" + day
}

def getZodiac(idCard: String): String = {
  val month = idCard.substring(10,12).toInt
  val day = idCard.substring(12,14).toInt

  if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) "水瓶座"
  else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) "双鱼座"
  else if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) "白羊座"
  else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) "金牛座"
  else if ((month == 5 && day >= 21) || (month == 6 && day <= 20)) "双子座"
  else if ((month == 6 && day >= 21) || (month == 7 && day <= 22)) "巨蟹座"
  else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) "狮子座"
  else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) "处女座"
  else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) "天秤座"
  else if ((month == 10 && day >= 23) || (month == 11 && day <= 21)) "天蝎座"
  else if ((month == 11 && day >= 22) || (month == 12 && day <= 21)) "射手座"
  else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) "摩羯座"
  else "未知"
}
def getInfo(zodiac: String): String = {
  val map = Map(
    "白羊座"->"热情奔放,充满活力,喜欢追求新鲜刺激,但有时冲动易怒,固执己见。",
    "金牛座"->"稳重务实,勤奋踏实,注重物质享受,但有时固执己见,对钱财看得较重。",
    "双子座"->"思维敏捷,沟通能力强,适应力强,但有时善变不安份,不够专注。",
    "巨蟹座"->"敏感温柔,家庭观念浓厚,保护意识强,但有时过于情绪化,依赖性强。",
    "狮子座"->"自信热情,有领导能力,讲义气,但有时耐不住寂寞,显得自大。",
    "处女座"->"细致完美,思路清晰,待人真诚,但有时过于挑剔,吹毛求疵。",
    "天秤座"->"和谐美感,公正理智,社交能力强,但有时优柔寡断,理想化。",
    "天蝎座"->"神秘坚定,敏锐洞察力强,但有时孤僻复杂,多疑狂妄。",
    "射手座"->"开朗乐观,爱自由冒险,但有时粗心大意,缺乏深度。",
    "摩羯座"->"稳重谨慎,有耐心和野心,但有时过于保守功利,缺乏热情。",
    "水瓶座"->"创新独立,理想主义,友善且叛逆,但有时反叛冷漠。",
    "双鱼座"->"浪漫敏感,富有同情心,爱幻想,但有时意志薄弱,粗心大意。"
  )
  map.getOrElse(zodiac, "未知")
}
def main(args: Array[String]): Unit = {
  val idCard = "429005200410100053"

  val gender = getGender(idCard)
  val brithday = getBirthday(idCard)
  val age = getAge(idCard)
  val province = getProvince(idCard)
  val zodiac = getZodiac(idCard)
  val info = getInfo(zodiac)

  println(s"---------------------------------")
  println(s"籍贯:${province}")
  println(s"性别:${gender}")
  println(s"年龄:${age}")
  println(s"生日:${brithday}")
  println(s"星座:${zodiac}")
  println(s"星座介绍:${info}")
  println(s"---------------------------------")
}