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

25 阅读3分钟
package string
/**
 * String 类型,字符串
 *  定义字符串:
 *    1.双引号
 *    2.三引号
 */
object string01 {
  def main(args: Array[String]): Unit = {
    val name = "小花"
    val str = s"I like scala,${name}"
    val content ="""
                   静夜思
                    李白
                 床前明月光,
                 疑是地上霜。
                 举头望明月,
                 低头思故乡。
                 """
    println(content)
  }
}

image.png

package string

/**
 * String 类型,字符串
 * 常用方法:
 *    1.长度length属性
 *    2.下标/从0开始,表示第一个字符
 *    3.截取 在一个长字符串中,取出一部分
 *
 */
object string02 {
  def main(args: Array[String]): Unit = {
    val str="hello scala"
    println(str.length)
    println(str(0))
    //取出“llo”这三个字符
    println(str.substring(2,5))
    //取出“cal”这三个字符
    println(str.substring( 7 , 10 ))
  }
}

image.png

package string

import java.time.LocalDate

/**
 * 案例:拆出身份证号秘密:
 *    1.倒数第二个数: 奇数,男; 偶数:女
 *    2.前面两个字符:省份: 11北京, 13河北
 *
 */
object string03 {
  //倒数第二个数:奇数,男; 偶数:女
  def getGender(idCard: String): String = {
    val g = idCard.substring(16, 17).toInt
    if (g % 2 == 1) {
      "男"
    } else {
      "女"
    }
  }

  def getAge(idCard: String): Int = {
    //根据身份证号的出生日期,计算年龄
    val year = idCard.substring(6, 10)
    //今年的年份 - year
    LocalDate.now().getYear - year.toInt
  }

    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" -> "重庆", "51" -> "四川", "52" -> "贵州", "53" -> "云南", "54" -> "西藏", "61" -> "陕西", "62" -> "甘肃", "63" -> "青海", "64" -> "宁夏", "65" -> "新疆", "71" -> "台湾", "81" -> "香港", "82" -> "澳门")
      map.getOrElse(code, "未知")
    }

    def main(args: Array[String]): Unit = {
      val idCard = "234493200410100083"
      val gender = getGender(idCard)
      val birthday = "10-10"
      val age = 21
      val province = "湖北"
      val zodiac = "天秤座"
      println(s"-------------------------")
      println(s"籍贯:${province}")
      println(s"性别:${gender}")
      println(s"年龄:${age}")
      println(s"生日:${birthday}")
      println(s"星座:${zodiac}")
      println(s"-------------------------")
    }
  }

image.png

package string
import java.time.LocalDate
import scala.collection.immutable
/**
 * 案例:拆出身份证号秘密:
 *    1.倒数第二个数: 奇数,男; 偶数:女
 *    2.前面两个字符:省份: 11北京, 13河北
 *
 */
object string03 {
  //倒数第二个数:奇数,男; 偶数:女
  def getGender(idCard: String): String = {
    val g = idCard.substring(16, 17).toInt
    if (g % 2 == 1) {
      "男"
    } else {
      "女"
    }
  }
  def getAge(idCard: String): Int = {
    //根据身份证号的出生日期,计算年龄
    val year = idCard.substring(6, 10)
    //今年的年份 - year
    LocalDate.now().getYear - year.toInt
  }
    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" -> "重庆", "51" -> "四川", "52" -> "贵州", "53" -> "云南", "54" -> "西藏", "61" -> "陕西", "62" -> "甘肃", "63" -> "青海", "64" -> "宁夏", "65" -> "新疆", "71" -> "台湾", "81" -> "香港", "82" -> "澳门")
      map.getOrElse(code, "未知")
    }

  def getBirtday(idCard: String): Unit = {
    val month = idCard.substring(10, 12).toInt
    val day = idCard.substring(12, 14).toInt
    month + "-" + day
  }
  def getzODiac(idCard: String): Unit = {
    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 <= 23)) "天秤座"
    else if ((month == 10 && day >= 24) || (month == 11 && day <= 22)) "天蝎座"
    else if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) "射手座"
    else if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) "魔歇座"
    else "未知"
  }

  def getInfo(zodiac:String):String={
    val map =Map(
      "白羊座"->"热情奔放,充满活力,喜欢追求新鲜刺激,但有时冲动易怒,固执己见",
      "金牛座"->"沉稳可靠,务实坚韧,对美食和艺术有品味,但性格固执,适应新变化慢",
      "双子座"->"头脑灵活,善于交际,对新鲜事物充满好奇,但做事没长性,容易分心",
      "巨蟹座"->"温柔恋家,体贴包容,富有同情心,但内心敏感脆弱,情绪波动较大",
      "狮子座"->"自信大方,极具领导力,待人慷慨热情,但好面子爱炫耀,控制欲较强",
      "处女座"->"细致严谨,逻辑清晰,做事精益求精,但过度追求完美,爱吹毛求疵",
      "天秤座"->"优雅友善,擅长协调人际关系,审美出众,但选择困难,易为合群失主见",
      "天蝎座"->"意志坚定,洞察力强,对感情格外执着,但性格神秘高冷,占有欲强且记仇",
      "射手座"->"乐观豁达,热爱自由,喜欢探索未知,但做事粗心,说话坦率易得罪人",
      "摩羯座"->"责任感强,自律沉稳,做事脚踏实地,但性格严肃古板,习惯压抑情绪",
      "水瓶座"->"想法前卫,崇尚自由,富有创新精神,但性格过于自我,有时缺乏责任心",
      "双鱼座"->"浪漫善良,富有同情心,想象力丰富,但爱幻想易情绪化,遇事缺乏理性")
      map.getOrElse(zodiac,"未知")
  }

    def main(args: Array[String]): Unit = {
      val idCard = "234493200410100083"

      val gender = getGender(idCard)
      val birthday = getBirtday(idCard)
      val age = getAge(idCard)
      val province = getprovince(idCard)
      val zodiac = getzODiac(idCard) //星座
      println(s"-------------------------")
      println(s" 籍贯:${province}")
      println(s" 性别:${gender}")
      println(s" 年龄:${age}")
      println(s" 生日:${birthday}")
      println(s" 星座:${zodiac}")
      println(s" 性格介绍:${getInfo}")
      println(s"-------------------------")
    }
  }

image.png