性别提取2025.12.17

3 阅读1分钟
object StringDemo3 {
  def getGender(idCard: String): String = {
    if (idCard.substring(16, 17).toInt % 2 == 1) {
      "男"
    } else {
      "女"
    }
  }

  def getProvince(idCard: String): String = {
    val code = idCard.substring(0, 2) // 11->"北京","12->"天津","13->"河北","14->"山西","15->"内蒙古","21->"辽宁","22->"吉林","23->"黑龙江","31->"上海","32->"江苏","33->"浙江","34->"安徽","35->"福建","36->"江西","37->"山东","41->"河
    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 = "140905200401010083"
    val gender = getGender(idCard)
    val age = 21
    val birthday = "10-10"
    val province = getProvince(idCard)
    val zodiac = "天秤座" // 星座
    println("-----------------------------")
    println(s"籍贯: ${province}")
    println(s"性别: ${gender}")
    println(s"年龄: ${age}")
    println(s"生日: ${birthday}")
    println(s"星座: ${zodiac}")
    println("-----------------------------")
  }
}

、优化亮点总结​

  1. 封装性:将工具方法封装为单例对象 IdCardParser,提供清晰的 API 接口​
  1. 健壮性:新增身份证格式校验,避免运行时异常​
  1. 扩展性:分离星座计算等辅助功能,通过工具类解耦​
  1. 可读性:补充详细注释,规范方法命名,符合 Scala 编码规范​

、应用场景与扩展建议​

  • 适用场景:用户中心、实名认证系统、政务类应用​
  • 扩展方向:​
  1. 支持 15 位旧身份证解析(需兼容出生日期编码)​
  1. 添加身份证校验码验证(最后一位)​
  1. 封装为独立依赖库,发布到 Maven 仓库​
  1. 结合 Spark 实现批量身份证解析(大数据场景)​

六、总结