[Java] Java密码发生器 →→→→→进入此内容的聊天室

来自 , 2020-11-08, 写在 Java, 查看 184 次.
URL http://www.code666.cn/view/69f8ea31
  1. package cn.dlpu.lby;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Scanner;
  6.  
  7. public class Mimahuoqu {
  8.         /*
  9.          * 密码发生器 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,
  10.          * 容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了...
  11.          * 这个程序的任务就是把一串拼音字母转换为6位数字(密码)。
  12.          * 我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。 变换的过程如下: 第一步.
  13.          * 把字符串6个一组折叠起来,比如wangximing则变为: wangxi ming 第二步.
  14.          * 把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字,如上面的例子,则得出: 228 202 220 206 120 105 第三步.
  15.          * 再把每个数字“缩位”处理:就是把每个位的数字相加,得出的数字如果不是一位数字, 就再缩位,直到变成一位数字为止。例如: 228 =>
  16.          * 2+2+8=12 => 1+2=3 上面的数字缩位后变为:344836, 这就是程序最终的输出结果!
  17.          * 要求程序从标准输入接收数据,在标准输出上输出结果。
  18.          * 输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行字符串,就是等待变换的字符串。 输出格式为:n行变换后的6位密码。
  19.          * 例如,输入: 5 zhangfeng wangximing jiujingfazi woaibeijingtiananmen
  20.          * haohaoxuexi 则输出: 772243 344836 297332 716652 875843
  21.          */
  22.  
  23.         public static void main(String[] args) {
  24.                 // TODO Auto-generated method stub
  25.                 Scanner sc = new Scanner(System.in);
  26.                 int n = sc.nextInt();
  27.                 sc.nextLine();
  28.                 List<String> arr = new ArrayList<String>();
  29.                 for (int i = 0; i < n; i++) {
  30.                         arr.add(sc.nextLine());
  31.                 }
  32.                 for (int i = 0; i < n; i++) {
  33.                         transform(arr.get(i));
  34.                 }
  35.         }
  36.  
  37.         // 分解字符串
  38.         private static void transform(String str) {
  39.                 // TODO Auto-generated method stub
  40.                 int n = (str.length() + 5) / 6;
  41.                 char[][] c = new char[n][];
  42.                 for (int i = 0; i < n; i++) {
  43.                         if (str.length() > 6) {
  44.                                 c[i] = str.substring(0, 6).toCharArray();
  45.                                 str = str.substring(6);
  46.                         } else {
  47.                                 c[i] = str.substring(0,str.length()).toCharArray();
  48.                                 break;
  49.                         }
  50.                 }
  51.                 cal(c);
  52.  
  53.         }
  54.  
  55.         // 计算
  56.         private static void cal(char[][] c) {
  57.                 // TODO Auto-generated method stub
  58.                 int last = c[c.length-1].length;
  59.                 int[] n = new int[6];
  60.                 for (int i = 0; i < 6; i++) {
  61.                         for (int j = 0; j < c.length-1; j++) {
  62.                                 n[i] += c[j][i];
  63.                         }
  64.                 }
  65.                 for(int t=0;t<last;t++){
  66.                         n[t] += c[c.length -1][t];
  67.                 }
  68.                 condense(n);
  69.         }
  70.         //缩位
  71.         private static void condense(int[] n) {
  72.                 // TODO Auto-generated method stub
  73.                 StringBuffer sb = new StringBuffer();
  74.                 for(int i = 0;i<6;i++){
  75.                         char[] cc = (""+n[i]).toCharArray();
  76.                         sb.append(con(cc));
  77.                 }
  78.                 System.out.println(sb);
  79.         }
  80.  
  81.         private static char con(char[] cc) {
  82.                 // TODO Auto-generated method stub
  83.                 if(cc.length<=1){
  84.                         return cc[0];
  85.                 }
  86.                 int temp = 0;
  87.                 for(int i = 0;i<cc.length;i++){
  88.                         temp += cc[i]-'0';
  89.                 }
  90.                 cc = (""+temp).toCharArray();
  91.                 return con(cc);
  92.         }
  93.  
  94. }
  95.  
  96. //java/7792

回复 "Java密码发生器"

这儿你可以回复上面这条便签

captcha