Scala关于身份证的常规操作

发布于:2024-11-27 ⋅ 阅读:(131) ⋅ 点赞:(0)
字符串知识点
1.toInt:把字符串转成整数
2.toUpperCase:变大写
3.toLowerCase::变小写
4.substring(起点下标,终点下标(不包括))字符串截取
5.charAt(下标)得到对应位置的字符(不是字符串)
6.asDigit:把字符转成数字
7.“”“三引号字符串,支持换行
8.contains: 是否包含子串
9.length属性:用来获取有几个字符
object Test {
  def main(args: Array[String]): Unit = {
    val id = "42032220080903332X"
    println(s"身份证号是${id}")
    //1.生日是?
    //字符串截取
    val birthday = id.substring(10,14) // 不包括终点下标 (起点下标,终点下标)
    println(s"生日是${birthday}")

    val year = id.substring(6,10)
    println(s"出生年份是${year}")
//判断是女性还是男性
      //偶是是女性,奇数是男性
    val gender = id.substring(16,17)
    println(gender)
    if (gender.toInt % 2 == 0){
        println("是女性")
    }else{
        println("是男性")
    }

    // 省份代码映射
    val provinceCodes = Map(
      "41" -> "河南",
      "42" -> "湖北",
      "43" -> "湖南",
      "44" -> "广东",
      "45" -> "广西",
      "46" -> "海南"
    )
      // 获取身份证号码的前两位作为省份代码
      val provinceCode = id.substring(0, 2)

      // 根据省份代码获取省份名称
      val province = provinceCodes.get(provinceCode).getOrElse("未知省份")

      println(s"省份是:$province")


    // 获取出生年份
    val yearInt = id.substring(6, 10).toInt

    // 生肖数组
    val zodiacs = Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊","猴", "鸡", "狗", "猪")

    // 计算生肖
    // 2008年是鼠年,所以用 (yearInt - 2008) % 12 来计算相对于鼠年的偏移
    val zodiacIndex = (yearInt - 4) % 12 // 2008年是鼠年,所以用4(鼠年的索引)
    val zodiac = zodiacs(zodiacIndex)
    println(s"生肖是:$zodiac")

    //判断身份证号是否合法
    val weights = Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
    val checkCodes = "10X98765432"
    var sum = 0
    for(i <- 0 to 16){
      sum += id(i).asDigit * weights(i)
    }
    //把累加的结果模11,找到对于的校验码
    if(id.charAt(17) == checkCodes.charAt(sum % 11)){
      println(s"身份证号${id}是合法的")
    } else {
      println(s"身份证号${id}是不合法的")
    }
  }
}


网站公告

今日签到

点亮在社区的每一天
去签到