private static int[] weight = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
private static char[] validate = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
private static boolean isIdCard(String card) {
if (card == null)
return false;
card = card.trim() ;
if(card.length() == 15){
for(char d : card.toCharArray()){
if(!('0' <= d && d <= '9') )
return false ;
}
return true ;
}
else if (card.length() == 18) {
int sum = 0;
for(char d : card.toCharArray()){
if(!( ('0' <= d && d <= '9') || d == 'x' || d == 'X' ) )
return false ;
}
for(int i = 0; i < card.length() - 1 ; i++) {
char d = card.charAt(i) ;
if('0' <= d && d <= '9'){
sum = sum + (d - '0') * weight[i] ;
}
else return false ;
}
if (validate[sum % 11] == card.charAt(17)) {
return true;
}
}
return false;
}
public static String filterIdCard(String str){
if(str == null) return null ;
StringBuilder builder = new StringBuilder() ;
int n = str.length() ;
boolean[] vis = new boolean[n] ;
Arrays.fill(vis , false) ;
for(int i = 0 ; i < n ; i++){
char d = str.charAt(i) ;
if('0' <= d && d <= '9' && !vis[i]){
if(i + 18 <= n && isIdCard(str.substring(i, i+18))){
Arrays.fill(vis, i, i+18 , true) ;
builder.append("****") ;
}
else if(i + 15 <= n && isIdCard(str.substring(i, i+15))){
Arrays.fill(vis, i, i+15 , true) ;
builder.append("****") ;
}
}
if(!vis[i]) builder.append(str.charAt(i)) ;
}
return builder.toString() ;
}
身份证号过滤
最新推荐文章于 2023-02-27 16:59:51 发布