Bootstrap

Scala的身份证中的秘密

不知道大家有没有好奇过身份证上数字的排列,今天我们来了解一下身份证中的秘密。

并且判断一下随便输入一串数字的身份证号是否合法

package Test
import scala.util.Random

//字符串
//知识点
//1.toInt把字符串转成整数
object day15 {
  def main(args: Array[String]): Unit = {
    val score = 90
    val id = "42022220080903332X".toUpperCase//toUpperCase变大写
    //1.生日是?
    val birthday = id.substring(10, 14) //不包括终点下标
    println(s"生日是:${birthday}")
    val year = id.substring(6, 10) //6,7,8,9这个下标
    println(s"年份是:${year}")
    //性别:倒数第二位,如果是奇数就是boy,偶数girl
    val gender = id.substring(16, 17)
    println(s"性别${gender}")
    if (gender.toInt % 2 == 0) {
      println("她是女生")
    } else {
      println("她是男生")
    }
    //前两位是省份
    val province = id.substring(0, 2).toInt
    val m1 = Map((41, "河南"), (42, "湖北"), (43, "湖南"), (44, "广东"))

    println(s"籍贯是${m1.get(province)}")
    //身份证倒数3,4位表示省市乡镇信息
    val ppp = id.substring(14, 16)
    println(ppp)
    //求验证身份证号是不是合法的
    val weights = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
    val checkCode = "10X98765432"
    var sum = 0
    for (i <- 0 to 16) {
      sum += id(i).toInt * weights(i)
    }
    println(sum%11)
    if (id.charAt(17) == checkCode.charAt(sum % 11)) {
      println(s"身份证号码${id}合法")
    } else {
      println(s"身份证号码${id}不合法")
    }

  }

}

;