身份证号

86 阅读2分钟

(一)、身份证号的基本知识

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

前2位是省市的信息;

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

接下来8位是生日;

倒数第2位表示性别;

最后一位是校验码;

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

import java.time.LocalDate

/**
 *
 *    字符串
 *    1.理论
 *       两种定义格式 (1) 双引号  (2)三引号,支持换行
 *       (1)获取指定下标上的字符
 *       (2)获取字符串的长度
 *       (3)获取子串,只需要一个长字符串中的一部分
 *
 *    2.应用:从身份证号中,解析出基本信息
 *      示例:42900519840622 0 51
 *
 *      (1)省份:42
 *      (2)市区,乡镇:9005
 *      (3)出生年份:1984
 *      (4)出生日期:0622
 *      (5)顺序码 00、
 *      (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)
    //42 --> 湖北省
    val provinceMap = 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" -> "澳门特别行政区",
    )
      provinceMap.getOrElse(procode, "未知")
  }
  //水瓶座 1/20~2/10
  def getZodiac(idCard:String):String = {
    val month = idCard.substring(10,12).toInt
    val day = idCard.substring(12,14).toInt
    val zodiacs = Array("水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座")
    val boundaries = Array(120,219,321,420,521,622,723,823,923,1023,1122,1222)
    val date = month * 100+day
    val index = boundaries.search(date).insertionPoint
    zodiacs(index)
  }
  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 zodiac = getZodiac(idCard)
//输出一些基本信息
    println(s"""
       性别:${gender}
       生日:${birthday}
       籍贯:${province}
       年龄:${age}
       星座:${zodiac}
         """)

    }

}