java 手机号加密 测试使用

java 手机号加密 测试使用

package com.ruoyi.hfiveinterface.util;


import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

@Service
public class phoneUtil {


    /**
     * 数字 0 1 2 3 4 5 6 7 8 9
     * 字母 b a c g h k o w q p
     * @param val
     * @return 数字转字母
     */
    public  String getPhoneStr(String val) {
        String returnStr = "";
        if (val != null && val.length() > 0) {
            byte[] obj = val.getBytes();
            for (int i = 0; i < obj.length; i++) {
                returnStr += getLetter(String.valueOf(val.charAt(i)));
            }
        }
        return returnStr;
    }
    /**
     * 字母转数字
     * 字母 b a c g h k o w q p
     * 数字 0 1 2 3 4 5 6 7 8 9
     * @param val
     * @return
     */
    public  String getPhoneNum(String val){
        String returnStr = "";
        if (val != null && val.length() > 0) {
            byte[] obj = val.getBytes();
            for (int i = 0; i < obj.length; i++) {
                returnStr += getMapData().get(String.valueOf(val.charAt(i)));
            }
        }
        return returnStr;
    }




    /***
     * 换位号码中两组数字:第二位和第六位交换,第三位和第五位交换,位数号按从左往右数
     * 13510642584
     * 16015342584
     */
    /*public  String changeNum(String val){

        if(!UtilTools.isEmpty(val)){
            String str="";
            char [] phone=val.toCharArray();
            for(int i=0;i<phone.length;i++){
                if(i==1||i==2||i==4||i==5){
                    if(i==1)
                        str+=phone[5];
                    if(i==2)
                        str+=phone[4];
                    if(i==4)
                        str+=phone[2];
                    if(i==5)
                        str+=phone[1];
                }else{
                    str+=phone[i];
                }
            }
            return str;
        }
        return val;
    }*/

    /**
     * 通过Map值获取key
     * @return
     */
    public  String getLetter(String val) {
        for(Map.Entry<String,String> entry:getMapData().entrySet()){
            if(val.equals(entry.getValue()))
                return String.valueOf(entry.getKey());
        }
        return val;
    }

    /**
     * 字母 b a c g h k o w q p
     * 数字 0 1 2 3 4 5 6 7 8 9
     * @return Map
     */
    public  Map<String,String> getMapData(){
        Map<String,String> map = new HashMap<String,String>();
        map.put("b","0");
        map.put("a","1");
        map.put("c","2");
        map.put("g","3");
        map.put("h","4");
        map.put("k","5");
        map.put("o","6");
        map.put("w","7");
        map.put("q","8");
        map.put("p","9");
        return map;
    }



    /**
     * 字符串前增加“~”
     */
    public  String prefixStr(String val){
        return "~"+val;
    }

    /**
     *  过滤字符串前的“~”
     */
    public  String filterStr(String val){
        if(val!=null&&val.indexOf("~")>-1){
            return val.substring(1,val.length());
        }
        if(val!=null&&val.indexOf("%")>-1){
            val=val.replace("%7E","~").replace("%7e","~");
            return val.substring(1,val.length());
        }
        return val;
    }

    /**
     * 去除所有数字
     */
    public  String removeNum(String val){
        return val.replaceAll("\\d+","");
    }


    /**
     * 随机插入3个数字
     */
    public  String insertNum(String val){
        String num=radomNum(3);
        //往指定长度字符串加入随机数字
        for(int i=0;i<num.length();i++){
            Integer inNum= Integer.parseInt(radomNum(1));
            String result=val.substring(0,inNum>val.length()?val.length():inNum)+num.charAt(i)+val.substring(inNum>val.length()?val.length():inNum,val.length());
            val=result;
        }
        return val;
    }


    /**
     * 随机生成i位数字
     * i<10
     */
    public  String radomNum(int i){
        Random random = new Random();
        String val=String.valueOf(random.nextInt());
        return val.substring(0,i).indexOf("-")>-1?radomNum(i):val.substring(0,i);
    }


    /**
     * :加密步骤:
     * 1、换位号码中两组数字:第二位和第六位交换,第三位和第五位交换
     * 2、将全部号码转换为对应的字符
     * 3、任意位置插入三个随机数字
     * 4、在步骤C之后的字符串前加上”~”
     * @return
     */
    public  String encryptPhone(String phoneStr){
        //1.换位号码中两组数字:第二位和第六位交换,第三位和第五位交换
        //phoneStr=changeNum(phoneStr);
        //2.将全部号码转换为对应的字符
        phoneStr=getPhoneStr(phoneStr);
        //3.任意位置插入三个随机数字
        phoneStr=insertNum(phoneStr);
        //4.在步骤C之后的字符串前加上”~”
        phoneStr=prefixStr(phoneStr);
        return phoneStr;
    }


    /**
     * :解密步骤:
     * 1、去除字符串前”~”
     * 2、去除所有数字
     * 3、将剩余字母全部转换为对应的数字
     * 4、换位号码中两组数字:第二位和第六位交换,第三位和第五位交换
     * @return
     */
    public  String decryptPhone(String phoneStr){
        //if(!UtilTools.isNumber(phoneStr)){
            //1.去除字符串前”~”
            phoneStr=filterStr(phoneStr);
            //2.去除所有数字
            phoneStr=removeNum(phoneStr);
            //3.将剩余字母全部转换为对应的数字
            phoneStr=getPhoneNum(phoneStr);
            //4.换位号码中两组数字:第二位和第六位交换,第三位和第五位交换
            //phoneStr=changeNum(phoneStr);
        //}
        return phoneStr;
    }



    /**
     * 正则表达式数字验证
     *
     * @author crab
     * @param str
     * @return
     */
    public  boolean isNumber(String str) {
        if (str != null && !str.equals("")) {
            java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("[0-9]*");
            java.util.regex.Matcher match = pattern.matcher(str);
            return match.matches();
        } else {
            return false;
        }
    }

    /**
     * 字符串非空非null判断 crab
     */
    public  boolean isEmpty(String val) {
        if (val == null || val.equals("") || val.equalsIgnoreCase("null")) {
            return true;
        } else {
            return false;
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值