字符串-身份证中的秘密

20 阅读1分钟

String 的定义

String 在 Scala 中是不可变的字符序列,这意味着一旦创建,其内容就不能被修改。 定义格式:

1.双引号: val str = "xxxx"

2.三引号。支持换行。

object stringIid01 {
  def main(args: Array[String]): Unit = {
    val name = "小花"

    val str = s"I like scala, $name"

    val content =
      """静夜思
        |李白
        |床前明月光,
        |疑是地上霜。
        |举头望明月,
        |低头思故乡。
      """.stripMargin

    println(content)
  }
}

String 的常用方法

  • 索引访问
  • 长度获取
  • 子串提取
  • 字符串转成数字
object stringIid02 {
  def main(args: Array[String]): Unit = {
    val str = "hello scala"

    // 获取字符串长度
    println(str.length)
    println(str(9))
    println(str.substring(2, 5))
    println(str.substring(7, 10))
  }
}

身份证号的基本知识

前2位是省市的信息;

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

接下来8位是生日;

倒数第2位表示性别;

最后一位是校验码;

object stringIid03 {
  // 获取性别:奇数→男,偶数→女
  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"->"天津", "31"->"上海", "50"->"重庆", "13"->"河北", "14"->"山西", "15"->"内蒙古", "21"->"辽宁", "22"->"吉林", "23"->"黑龙江", "32"->"江苏", "33"->"浙江", "34"->"安徽", "35"->"福建", "36"->"江西", "37"->"山东", "41"->"河南", "42"->"湖北", "43"->"湖南", "44"->"广东", "45"->"广西", "46"->"海南", "51"->"四川", "52"->"贵州", "53"->"云南", "54"->"西藏", "61"->"陕西", "62"->"甘肃", "63"->"青海", "64"->"宁夏", "65"->"新疆", "71"->"台湾", "81"->"香港"
    )
    map.getOrElse(code, "未知")
  }

  def main(args: Array[String]): Unit = {
    val idCard = "32065200410100885"
    val gender = getGender(idCard)
    val birthday = "1010"
    val age = 21
    val province = getProvince(idCard)
    val zodiac = "天秤座" // 星座

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

输入身份证号输出基本信息