开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段):数据预处理-数据脱敏总结】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/671/detail/11650
数据预处理-数据脱敏总结
内容介绍:
一、脱敏思路
二、关键代码
回顾整体的实现思路,脱敏的目的:数据中含有身份证号码,手机号码等敏感信息,为防止数据泄露,需将敏感进行加密操作。
一、脱敏思路
先把数据读过来,然后获取到身份证号或者是手机号的正则表达式。用正则去匹配数据,匹配出有可能是手机或者是身份证号的数据。拿到每一个数据的时候,都得判断它,因为正则匹配出来的,不一定百分百是,接下来就判断它一定是一个手机号码。有两种情况,一种情况是前面一位数字手机号的第一位,不是数字,并且手机号码最后一位的后面它也不是数字,两种情况如:abc18611577667def
Abcdef18611577667
W18611577667d23
判断出一定是手机号以后,加密后的数据去替换原始的数据。身份证号脱敏实际上和手机号脱敏的思路是一模一样,不同之处在于两个数据的正则表达式不一样,且身份证号码的长度是18位,手机号码的长度是11位。
二、关键代码
1、获取kafka的数据
2、获取手机号和身份证号码的正则表达式
valphonePattern=Pattern.compile("((13[0一
9])1(14[517])1(15([0一3]1[5一91]))1(17[0一9])1(18[0,5一9])\d{8}")
3、使用正则匹配数据获取出有可能是手机号的数据
valphones=phonePattern.matcher(encryptedData)
4、判断出一定是手机号的数据
4.1、手机号码前一个位置不是数字,并且后一位也不是数字,那么表示这个一定是手机号
4.2、手机号码前一个位置不是数字,并且手机号码是一条数据中的最后一个数据,那么表示这个一定是手机号
5、确定出是手机号后,将手机号加密,替换原始的数据
//3判断出一定是手机号的数据
//3-1手机号码用一个位置不是数字,并且手机号码是一条数据中的最后一个数据,那么表示这个一定是手机号
if(!befLettermatches("A[0一9]$")){
//若手机号的最后一位后面的角标大于数据的总长度那么表示这个手机号是数据的最后一位
ifCaftIndex>encryptedoata.length){
//确定出是手机号后,将手机号加密,替换原始的數据
encryptedData=encryptedData.replace(phone,md5,getMD5ofstr(phone))
}e1se{//表示数据不是最后一位
//3-2手机号码前一个位置不是数字,并且后一位也不是数字,那么表示这个一定是手机号
//获取到手机号码最后一位数字后面一位的字符
Val aftLetter=encryptedData.charAt(aftIndex).tostring
if(laftLetter。matches("A[0一9]$")){
//确定出是手机号后,将手机号加密,曹换原始的数据
encryptedData=encryptedData.replace(phone,nd5.getMD5ofstr(phone))
}
身份证号的脱敏:和我们前面的手机脱敏一模一样,只不过这俩正则和长度不一样,其他的都是一样的。