案例

17 阅读2分钟
package stringid
/*
案例,拆身份证号的秘密
 */
import java.time.LocalDate
object stringid02 {
  //倒数第二个数: 奇数:男;偶数:女
  def getGender(idCard:String):String = {
    val g = idCard.substring(16,17).toInt
    if(g % 2 == 1){
      "男"
    }else{
      "女"
    }
  }
  def getAge(idCard:String):Int = {
    val year = idCard.substring(16,17)
    LocalDate.now().getYear - year.toInt
  }
  def getProvince(idCard:String):String = {
    val code = idCard.substring(0,2)
    val map = Map("11"->"北京","12"->"天津")
    map.getOrElse(code,"未知")
  }
  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 getBirthday(idCard: String): String = {
    val month = idCard.substring(10, 12)
    val day = idCard.substring(12, 14)
    month + "-" + day
  }
 def getInfo(zodiac:String):String = {
    val map = Map(
    "白羊座" -> "热情活泼,充满活力,喜欢追求新鲜刺激,但有时冲动易怒,固执己见。",
    "金牛座" -> "稳重踏实,勤奋踏实,注重物质享受,但有时固执己见,对钱财看得较重。",
    "双子座" -> "思维敏捷,沟通能力强,适应力强,但有时善变不安,不够专注。",
    "巨蟹座" -> "敏感温柔,家庭观念浓厚,保护欲强,但有时过于情绪化,依赖性强。",
    "狮子座" -> "自信热情,有领导能力,讲义气,但有时刚愎自用,虚荣心强。",
    "处女座" -> "细致完美,思路清晰,待人真诚,但有时过于挑剔,吹毛求疵。",
    "天秤座" -> "和谐公正,公关协调力强,但有时犹豫不决,优柔寡断,理想化。",
    "天蝎座" -> "神秘敏锐,固执洞察力强,但有时报复心强,多疑。",
    "射手座" -> "乐观开赋,爱自由冒险,但有时粗心大意,缺乏耐性。",
    "摩羯座" -> "稳重理性,有耐心和野心,但有时过于保守功利,缺乏热情。",
    "水瓶座" -> "创新独立,理想主义,友善团结,但有时反叛冷酷。",
    "双鱼座" -> "浪漫细腻,富有同情心,爱幻想,但有时意志薄弱,粗心大意。")
    map.getOrElse(zodiac, "未知")
  }
  def main(args: Array[String]): Unit = {
    val idCard = "149005201503030083"

    val gender = getGender(idCard)
    val birthday =getBirthday(idCard)
    val age = getAge(idCard)
    val province = getProvince(idCard)
    val zodiac = getZodiac(idCard)//星座
    val info = getInfo(zodiac)
    println(s"---------------------")
    println(s"性别:${gender}")
    println(s"籍贯:${province}")
    println(s"年龄:${age}")
    println(s"星座:${zodiac}")
    println(s"生日:${birthday}")
    println(s"性格介绍:${info}")
    println(s"---------------------")
  }
}