scala中的字符串-身份证实例

41 阅读3分钟

(一)身份证号本知识

举例某个同学的身份证信息

前2位是省市的信息;

后四位是具体的乡镇信息;

接下来8位是生日;

倒数第2位表示性别;

最后一位是校验码;

(二)实现:输入身份证号输出基本信息

例子:

*应用:从身份证号中解析出基本信息
*实例:422345200509298756
*
*(1) 省份:42 湖北
     *(2) 市区,乡镇 2345
     *(3) 出生年份 2005
     *(4) 出生日期 0929
     *(5) 顺序码 87
     *(6) 倒数第二位 5, 奇数表示性别:男, 偶数:女
     *(7) 最后一位,是校验码,验证这个身份证号是不是瞎编!!!
*/
object string02 {

  def getGender(idCard:String):String = {
    val gender  = idCard.substring(16,17).toInt
    if(gender % 2 == 0)
      "女"
    else
      "男"
  }

  def getBirthday(idCard:String):String = {
    val year = idCard.substring(6,10)
    val month = idCard.substring(10,12)
    val day = idCard.substring(12,14)
    year+"-"+month+"-"+day
  }

  def getage(idCard: String): Int = {
    val year = idCard.substring(6, 10).toInt
    // 获取当前年份
    val currentYear = LocalDate.now().getYear
    currentYear - year

  }

  def getProvince(idCard:String):String = {
    val procode = idCard.substring(0,2)
    val provinceMap = scala.collection.immutable.Map(
      "42" -> "湖北省",
      "11" -> "北京市",
      "12" -> "天津市",
      "13" -> "河北省",
      "14" -> "山西省",
      "15" -> "内蒙古自治区",
      "21" -> "辽宁省",
      "22" -> "吉林省",
      "23" -> "黑龙江省",
      "31" -> "上海市",
      "32" -> "江苏省",
      "33" -> "浙江省",
      "34" -> "安徽省",
      "35" -> "福建省",
      "36" -> "江西省",
      "37" -> "山东省",
      "41" -> "河南省",
      "43" -> "湖南省",
      "44" -> "广东省",
      "45" -> "广西壮族自治区",
      "46" -> "海南省",
      "50" -> "重庆市",
      "51" -> "四川省",
      "52" -> "贵州省",
      "53" -> "云南省",
      "54" -> "西藏自治区",
      "61" -> "陕西省",
      "62" -> "甘肃省",
      "63" -> "青海省",
      "64" -> "宁夏回族自治区",
      "65" -> "新疆维吾尔自治区",
      "71" -> "台湾省",
      "81" -> "香港特别行政区",
      "82" -> "澳门特别行政区"
    )
    provinceMap.getOrElse(procode, "未知省份")

  }




  def getConstellation(month: Int, day: Int): String = {
    month match {
      case 1 if day >= 20 => "水瓶座"
      case 1 => "摩羯座"
      case 2 if day >= 19 => "双鱼座"
      case 2 => "水瓶座"
      case 3 if day >= 21 => "白羊座"
      case 3 => "双鱼座"
      case 4 if day >= 20 => "金牛座"
      case 4 => "白羊座"
      case 5 if day >= 21 => "双子座"
      case 5 => "金牛座"
      case 6 if day >= 22 => "巨蟹座"
      case 6 => "双子座"
      case 7 if day >= 23 => "狮子座"
      case 7 => "巨蟹座"
      case 8 if day >= 23 => "处女座"
      case 8 => "狮子座"
      case 9 if day >= 23 => "天秤座"
      case 9 => "处女座"
      case 10 if day >= 24 => "天蝎座"
      case 10 => "天秤座"
      case 11 if day >= 23 => "射手座"
      case 11 => "天蝎座"
      case 12 if day >= 22 => "摩羯座"
      case 12 => "射手座"
      case _ => "未知星座"
    }
  }

  def getConstellationFromIdCard(idCard: String): String = {
    // 提取月份(10-12位)和日期(12-14位)并转为整数
    val month = idCard.substring(10, 12).toInt
    val day = idCard.substring(12, 14).toInt
    getConstellation(month, day)
  }



  def main(args: Array[String]): Unit = {
    val idCard = "429005200010100026"
    val gender  =getGender(idCard)
    val birthday = getBirthday(idCard)
    val age = getage(idCard)
    val province = getProvince(idCard)
    val constellation = getConstellationFromIdCard(idCard)



    // 输出 一些基本信息


    println(
      s"""
     性别:${gender}
     生日:${birthday}
     籍贯:${province}
     年龄:${age}
     星座:${constellation}

         """)
  }

}

结果:

性别:女
     生日:2000-10-10
     籍贯:湖北省
     年龄:25
     星座:天秤座