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("-----------------------------")
}
}
、优化亮点总结
- 封装性:将工具方法封装为单例对象 IdCardParser,提供清晰的 API 接口
- 健壮性:新增身份证格式校验,避免运行时异常
- 扩展性:分离星座计算等辅助功能,通过工具类解耦
- 可读性:补充详细注释,规范方法命名,符合 Scala 编码规范
、应用场景与扩展建议
- 适用场景:用户中心、实名认证系统、政务类应用
- 扩展方向:
- 支持 15 位旧身份证解析(需兼容出生日期编码)
- 添加身份证校验码验证(最后一位)
- 封装为独立依赖库,发布到 Maven 仓库
- 结合 Spark 实现批量身份证解析(大数据场景)
六、总结