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

28 阅读3分钟

String 的定义

  • String 在 Scala 中是不可变的字符序列,这意味着一旦创建,其内容就不能被修改。
  • 定义格式:1.双引号: val str = "xxxx"2.三引号。支持换行。
package iterator

object stringid01 {
  def main(args: Array[String]): Unit = {
    var name="小花"
    val str=s"I like scala.${name}"
    val content="""
        静夜思
        李白
        床前明月光,
        疑是地上霜。
        举头望明月,
        低头思故乡。
        """
    println(content)
      }
  }

}

String 的常用方法

  • 1.长度:length属性
  • 2.下标:从零开始,表示第一个字符
  • 3.截取:在一个长的字符串中,取出一部分。substring(起点下标,终点下标——不包括)
  • 4.字符串转成数字

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

eg:拆分身份证号的秘密 1.倒数第二个数:奇数,男;偶数:女;

package iterator

object stringid03 {
  // 判断第二个参数:(男;男;女)
  def getGender(idCard: String): String = {
    val g = idCard.substring(16, 17).toInt
    if (g % 2 == 1) {
      "男"
    } else {
      "女"
    }
  }

  def main(args: Array[String]): Unit = {
    val idCard = "429005200401080083"
    val gender = getGender(idCard)
    val birthday = "10*"  // 原代码中生日逻辑未完善,暂保留
    val age = 21
    val province = "天津"
    val zodiac = "摩羯座" // 原代码中星座逻辑未完善,暂保留
    println(s"籍贯: $province")
    println(s"性别: $gender")
    println(s"年龄: $age")
    println(s"生日: $birthday")
    println(s"星座: $zodiac")
  }
}

2.根据身份证前两位判断地区

package iterator

object stringid03 {
  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" -> "天津", "13" -> "河北", "14" -> "山西", "15" -> "内蒙古",
      "21" -> "辽宁", "22" -> "吉林", "23" -> "黑龙江", "31" -> "上海", "32" -> "江苏",
      "33" -> "浙江", "34" -> "安徽", "35" -> "福建", "36" -> "江西", "37" -> "山东",
      "41" -> "河南"
    )
    map.getOrElse(code, "未知")
  }

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

3.根据身份证中的出生日期,计算年龄

  // 计算年龄
  def getAge(idCard: String): Int = {
    val year = idCard.substring(6, 10).toInt
    val nowYear = LocalDate.now().getYear
    nowYear - year
  }
}

4.根据生日计算星座

import java.time.LocalDate

object stringid03 {
  def getGender(idCard: String): String = {
    val g = idCard.substring(16, 17).toInt
    if (g % 2 == 1) "男" else "女"
  }

  def getBirthday(idCard: String): String = {
    val year = idCard.substring(6, 10)
    val month = idCard.substring(10, 12)
    val day = idCard.substring(12, 14)
    s"$year-$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 <= 20)) "双子座"
    else if ((month == 6 && day >= 21) || (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 <= 22)) "天蝎座"
    else if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) "射手座"
    else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) "摩羯座"
    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" -> "河南"
    )
    map.getOrElse(code, "未知省份")
  }

  def getAge(idCard: String): Int = {
    val year = idCard.substring(6, 10).toInt
    LocalDate.now().getYear - year
  }

  def main(args: Array[String]): Unit = {
    val idCard = "429005200401080083"
    val gender = getGender(idCard)
    val birthday = getBirthday(idCard)
    val age = getAge(idCard)
    val province = getProvince(idCard)
    val zodiac = getZodiac(idCard)

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

根据星座判断性格

def getAge(idCard: String): Int = {
  val year = idCard.substring(6, 10).toInt
  LocalDate.now().getYear - year
}
def getInfo(zodiac: String): String = {
  val map = Map(
    "白羊座" -> "热情冲动,充满活力,喜欢冒险和挑战,但有时冲动易怒,固执己见。",
    "金牛座" -> "稳重务实,勤勉踏实,重视物质享受,但有时固执己见,不喜欢轻易转变。",
    "双子座" -> "思维敏捷,沟通能力强,适应力强,但有时善变不安,对爱情不专。",
    "巨蟹座" -> "敏感温柔,家庭观念浓厚,很有母性,但有时过于情绪化,依赖性强。",
    "狮子座" -> "自信热情,有领导能力,神气坦荡,但有时过度骄傲,爱面子。",
    "处女座" -> "细致完美,思虑周密,待人认真,但有时过于吹毛求疵,洁癖。",
    "天秤座" -> "和谐公正,公关能力强,社交能力强,但有时优柔寡断,追求变化。",
    "天蝎座" -> "神秘性感,爱憎分明,但有时报复心强,嫉妒心强。",
    "射手座" -> "开朗乐观,爱好自由冒险,但有时过于粗心,缺乏耐心。",
    "摩羯座" -> "稳重谨慎,有耐心和细心,但有时过于务实功利,缺乏热情。",
    "水瓶座" -> "创新独立,理性主义,友善包容,但有时反叛冷漠。",
    "双鱼座" -> "浪漫感性,富有同情心,善解人意,但有时意志薄弱,粗心大意。"
  )
  map.getOrElse(zodiac, "未知")
}