scala中的字符串-身份证中的秘密

39 阅读2分钟

(一)String 的定义

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

定义格式:

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

2.三引号。支持换行。

(二)String 的常用方法

1.索引访问

可以使用索引来访问字符串中的字符,索引从 0 开始。

2.长度获取

使用length方法获取字符串长度。

3.子串提取

使用substring方法可以提取字符串的子串。

4.字符串转成数字

charAt() 得到的是字符,如果对字符使用toInt,就会得到对于的ASCII码。

asDigit。正确的使用方式是用asDiget。

(三)身份证号的基本知识

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

前2位是省市的信息;

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

接下来8位是生日;

倒数第2位表示性别;

最后一位是校验码;

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

package stringid

import java.time.LocalDate

// 案例:拆分身份证号的秘密
// 1. 倒数第二个数:奇数:男;偶数:女
object stringid03 {
  // 根据身份证号判断性别
  def getGender(idCard: String): String = {
    val g = idCard.substring(14, 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" -> "重庆")
    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 <= 21)) "双子座"
    else if ((month == 6 && day >= 22) || (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 main(args: Array[String]): Unit = {
    val idCard = "123456789101112083"
    val gender = getGender(idCard)
    val birthday = getBirthday(idCard)
    val age = getAge(idCard)
    val province =getProvince(idCard)

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