打乱手机号之后,穷举所有号码组成可能的合法号码

来源:互联网 发布:程序员人才网 编辑:程序博客网 时间:2024/06/06 01:06

打乱手机号之后,穷举所有号码组成可能的合法号码

微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑

 

import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class TestPhoneNet {

 static int[] bits = new int[] {0,1,2,3,3,4,4,6,6,6,8};//我的手机号,打乱之后的数字数组

 static int count=0;
 
 public static void main(String[] args) {
  
    Date date = new Date();
    sort("", bits);
    System.out.print("产生合法手机号数目【"+count+"】个!用时【" + (new Date().getTime() - date.getTime()) + "】毫秒!");
  
 }

 private static void sort(String prefix, int[] a) {
  
  if (a.length == 1) {
    //这一轮递归生成的数字组合 savedNum
   String savedNum=prefix + a[0];
      Pattern p = Pattern.compile("(1(([35][0-9])|(47)|[8][01236789]))\\d{8}");

         Matcher matcher = p.matcher(savedNum);
         if(matcher.find()){
         count++;
          //输出合法手机号
    System.out.println("合法手机号是:"+matcher.group());
         }
         
  }

  for (int i = 0; i < a.length; i++) {
   sort(prefix + a[i], copy(a, i));
  }
 }

 private static int[] copy(int[] a, int index) {
  int[] b = new int[a.length - 1];
  System.arraycopy(a, 0, b, 0, index);
  System.arraycopy(a, index + 1, b, index, a.length - index - 1);
  return b;
 }

}

 

 

运行结果:

……

合法手机号是:18666443203
合法手机号是:18666443230
合法手机号是:18666443302
合法手机号是:18666443320
产生合法手机号数目【1008000】个!用时【96802】毫秒!