密码验证

题目要求

密码要求:       1.长度超过8位       2.包括大小写字母.数字.其它符号,以上四种至少三种       3.不能有相同长度超2的子串重复       说明:长度超过2的子串

输入例子:
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出例子:
OK NG NG OK

import java.util.Scanner;

/**

 * Author: 王俊超

 * Date: 2015/12/22 15:45

 * All Rights Reserved !!!

 */

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));

        StringBuilder builder = new StringBuilder();

        while (scanner.hasNext()) {

            String input = scanner.nextLine();

            System.out.println(passwordValidate(input));

        }

        scanner.close();

    }

    private static String passwordValidate(String input) {

        final String OK = "OK";

        final String NG = "NG";

        // 长度超过8

        if (input == null || input.length() < 9) {

            return NG;

        }

        int[] kind = new int[4];

        // 统计

        for (int i = 0; i < input.length(); i++) {

            char ch = input.charAt(i);

            if (ch >= ‘A‘ && ch <= ‘Z‘) {

                kind[0] |= 1;

            } else if (ch >= ‘a‘ && ch <= ‘z‘) {

                kind[1] |= 1;

            } else if (ch >= ‘0‘ && ch <= ‘9‘) {

                kind[2] |= 1;

            } else {

                kind[3] |= 1;

            }

        }

        

        // 小于三种

        if ((kind[0] + kind[1] + kind[2] + kind[3]) < 3) {

            return NG;

        }

        for (int i = 0; i < input.length() - 3; i++) {           //因为超过2即最小是三

            String s1 = input.substring(i, i + 3);              // 吧字符串分隔,看后面的是否包含前面的即可

            String s2 = input.substring(i + 3, input.length());

            if (s2.contains(s1)) {

                return NG;

            }

        }

        return OK;

    }

}

字符串截取,substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。       //即subString是左闭右开的
beginIndex - 起始索引(包括)。从0开始
endIndex - 结束索引(不包括)。
"unhappy".substring(2) returns "happy"
"hamburger".substring(4, 8) returns "urge"

时间: 2024-10-04 13:23:48

密码验证的相关文章

接上篇 OPENVPN 证书+简单密码验证+防火墙策略

还是先介绍下环境 外网pc客户端  119.119.119.119 内网出口IP    112.112.112.112 openvpn服务器 192.168.0.250 openVPN ip池  172.18.1.0/24 内网服务器    192.168.0.1 安装步骤请参考之前文章,或者tar包下载源码安装即可. 配置支持用户名密码验证 服务器端配置文件: ###cat server.conf local 192.168.0.250  监听本地IP port 11940          

SSHH 免密码验证生产环境分发、管理、备份笔记01

SSHH 免密码验证生产环境分发.管理.备份实战应用指南 ssh是secure shell protocol的简写,它通过对联机数据包加密的技术进行数据传递.专门为远程登录会话 和其他网络服务提供安全的协议. ssh本身提供两个服务功能:一个是类似telnet的远程联机使用shell服务,即俗称的ssh; 另外一个是类似FTP服务的sftp-server,可以提供更安全的TFP. 从客户端来看,ssh提供两种级别的安全验证. 第一种级别(基于口令的安全验证) 只要你知道自己的账号和口令,就可以登

ssh-key 免密码验证分发、管理、备份指南笔记02

ssh-key 免密码验证分发.管理.备份指南02 1.备份需求分析 要求所有服务器在同一用户xiaoping系统用户下,实现B.A机器从本地备份数据到C机器上,在备份过程 中不需要C的提示系统密码验证. 即实现从A.B服务器备份数据到Z备份存储服务器的免密码登陆验证的解决方案 备份数据流方式如下: A--->C B-->C 想想比喻,即多把钥匙(A\B)开一把锁(C) 2.生成密钥对 [[email protected] ~]$ ssh-keygen -t dsa Generating pu

Windows下搭建Openvpn使用用户名和密码验证方式如何引用shell脚本

网上找了很多资料关于Openvpn使用用户名和密码验证方式的大都是在linux环境下搭建的.其实在windows下搭建可以参考linux的情况,可以找到很多资料,主要遇到的问题是如何引用那个checkpw.sh的shell脚本.这里记下自己的经验. 为了引用此脚本,看了网上一个博客后有了点idea.首先安装Cygwin,Cygwin是一个在windows平台上运行的类UNIX模拟环境.之后写一个bat文件,如script.bat: C:/cygwin64/bin/bash.exe  C:/che

【WCF】使用“用户名/密码”验证的合理方法

我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然后在服务器端自定义一个消息拦截器来验证用户名和密码. 以老周不靠谱的学识水平认为,这样做不好,直接把明文而且敏感信息放在SOAP头中传输,这尺度实在太大了,太暴露了,广电局是不会允许的,虽然现在流行穿得越少越好,但那些是婊子的境界.像用户名密码这些重要信息,怎么能直接传输呢,这很容易被偷窥的. 其实

javascript,html,正则表达式,邮箱密码验证

<!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <title>邮箱密码验证</title>         <style media="screen">         *{             margin: 0px;             padding: 0px;      

Centos7+Openvpn使用用户及密码验证登陆

我们上一篇文章介绍了Centos7+Openvpn使用证书验证登陆介绍,今天我们介绍Centos7+Openvpn使用用户及密码登陆验证,具体就补多少了,环境还是基于上一篇的更改来完成. 我们使用Centos7+Openvpn使用用户及密码登陆验证小下载一个验证脚本来完成用户验证登陆. http://openvpn.se/files/other/checkpsw.sh #!/bin/sh ######################################################

sshpass: 用于非交互的ssh 密码验证

ssh登陆不能在命令行中指定密码,也不能以shell中随处可见的,sshpass 的出现,解决了这一问题.它允许你用 -p 参数指定明文密码,然后直接登录远程服务器. 它支持密码从命令行,文件,环境变量中读取 $> sshpass -h Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters -f filename Take password to use from file -d number Use number as file descr

【WCF】Silverlight+wcf+自定义用户名密码验证

本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情况下自定义用户名密码验证 中提到了,我想实现的安全效果,就是客户端访问的时候不需要https,也不需要安装证书(商业证书客户端会自动信任),但是暴露的wcf接口不是每个人可以调用的,因为sl+wcf只支持basicHttpBinding一种绑定,在这种绑定下面其实是可以不适用传输安全,然后消息安全选

linux grub启动密码验证设置

1.认识启动配置选项 [[email protected] ~]# cat /boot/grub/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE:  You have a /boot partition.  This means that #          all kernel a