login (mobile email usercode)

news2024/12/29 13:36:18

手机、邮箱、用户编码登录

package login;


/**
 * 常量类(改造拉到你自己项目里面)
 *
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class Constant
{

	// 登录界面的登录方式:手机、邮箱、用户名
	public static final String LOGIN_TYPE_MOBILE = "MOBILE";
	public static final String LOGIN_TYPE_EMAIL = "EMAIL";
	public static final String LOGIN_TYPE_USERNAME = "USERNAME";
	
	
	public Constant()
	{
		
	}

}

package login;

/**
 * 用户实体类
 *
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class User
{
	private String id;
	private String usercode;
	private String username;
	private String email;
	private String mobile;
	private String password;

	//手机验证码(放另外一张表)
	//手机验证码生成时间
	//手机验证码结束时间

	public User()
	{

	}

	public User(String id, String usercode, String username, String email, String mobile, String password)
	{
		this.id = id;
		this.usercode = usercode;
		this.username = username;
		this.email = email;
		this.mobile = mobile;
		this.password = password;
	}

	public String getId()
	{
		return id;
	}

	public void setId(String id)
	{
		this.id = id;
	}

	public String getUsername()
	{
		return username;
	}

	public String getUsercode()
	{
		return usercode;
	}

	public void setUsercode(String usercode)
	{
		this.usercode = usercode;
	}

	public void setUsername(String username)
	{
		this.username = username;
	}

	public String getEmail()
	{
		return email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}

	public String getMobile()
	{
		return mobile;
	}

	public void setMobile(String mobile)
	{
		this.mobile = mobile;
	}

	public String getPassword()
	{
		return password;
	}

	public void setPassword(String password)
	{
		this.password = password;
	}
}

package login;

import java.util.ArrayList;

/**
 * 模拟服务端登录服务类(改造拉到你自己项目里面)
 *
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class LoginService
{	
	public LoginService()
	{
		
	}

	// 模拟用户数据库
	private ArrayList<User> listUser = new ArrayList<User>(); 

	// 注册用户
	public void initUser(User user)
	{
		listUser.add(user);
	}

	// 登录方法
	public User login(String identifier, String password)
	{
		String email = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
		String moblie = "^[1][34578]\\d{9}$";
		
		//
		User user = null;
		
		// 手机号登录,正常来说,判断手机是没法子用正则,因为手机变化太快了!!
		// 这个地方还是要用界面进来的类型来判断,不然的话
		// 【你如何确定   123 0000 0000 它就一定不是手机号码呢】
		// 【正则表达式有个致命问题,就是一旦变化没法子及时匹配】
		if(identifier.matches(moblie))
		{
			user = getUserByMobile(listUser, identifier);
		}
		// 邮箱登录
		else if(identifier.matches(email))
		{
			user = getUserByEmail(listUser, identifier);
		}
		// 用户名登录
		else
		{
			//如果输入11201234567,识别不到电话号码,就会直接进来
			//这个时候11201234567被当做username去查询肯定为null
			//然而数据库有可能存在User user3 = new User("user3", "user3@example.com", "11201234567", "kissme");
			user = getUserByUsercode(listUser, identifier);
			
			//----------------测试的时候可以注释下面
			if (user == null)
			{
				user = getUserByMobile(listUser, identifier);
			}
			//----------------
		}
		
		
		if (user != null && user.getPassword().equals(password))
		{
			return user;
		}
		else
		{
			return null; // 登录失败
		}
	}
	
	
	public User login2(String type, String identifier, String password)
	{
		//
		User user = null;
		
		// 手机号登录,正常来说,判断手机是没法子用正则,因为手机变化太快了!!
		// 这个地方还是要用界面进来的类型来判断,不然的话
		// 【你如何确定   123 0000 0000 它就一定不是手机号码呢】
		if(type.equals(Constant.LOGIN_TYPE_MOBILE))
		{
			user = getUserByMobile(listUser, identifier);
		}
		// 邮箱登录
		else if(type.equals(Constant.LOGIN_TYPE_EMAIL))
		{
			user = getUserByEmail(listUser, identifier);
		}
		// 用户名登录
		else
		{
			user = getUserByUsercode(listUser, identifier);
		}
		
		
		if (user != null && user.getPassword().equals(password))
		{
			return user;
		}
		else
		{
			return null; // 登录失败
		}
	}
	
	public String getIdByMobile(ArrayList<User> listUser, String identifier)
	{
		return null;
	}
	
	public String getIdByEmail(ArrayList<User> listUser, String identifier)
	{
		return null;
	}
	
	public String getIdByUsername(ArrayList<User> listUser, String identifier)
	{
		return null;
	}
	

	public User getUserByMobile(ArrayList<User> listUser, String identifier)
	{
		for (int i = 0; i < listUser.size(); i++)
		{
			User curUser = listUser.get(i);
			
			if (curUser != null && curUser.getMobile() != null && curUser.getMobile().equals(identifier))
			{
				return curUser;
			}
		}
		
		return null;
	}
	
	public User getUserByEmail(ArrayList<User> listUser, String identifier)
	{
		for (int i = 0; i < listUser.size(); i++)
		{
			User curUser = listUser.get(i);
			
			if (curUser != null && curUser.getEmail() != null && curUser.getEmail().equals(identifier))
			{
				return curUser;
			}
		}
		
		return null;
	}
	
	public User getUserByUsercode(ArrayList<User> listUser, String identifier)
	{
		for (int i = 0; i < listUser.size(); i++)
		{
			User curUser = listUser.get(i);
			
			if (curUser != null && curUser.getUsercode() != null && curUser.getUsercode().equals(identifier))
			{
				return curUser;
			}
		}
		
		return null;
	}



}

package login;


/**
 * 模拟用户界面UI登录
 * 
 * 
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class LoginTest
{

	public LoginTest()
	{
		
	}

	public static void main(String[] args)
	{
		LoginService loginService = new LoginService();

		// 注册一些用户
		User user1 = new User("005126", "user1", "曾大锋", "user1@example.com", "01234567891", "1314");
		User user2 = new User("005127", "user2", "曾二锋", "user2@example.com", "12301234567", "iloveu");
		User user3 = new User("005128", "user3", "曾三锋", "user3@example.com", "11201234567", "kissme");
		User user4 = new User("005129", "user4", "曾小锋", "117791303@qq.com", "13805029595", "kissme");

		loginService.initUser(user1);
		loginService.initUser(user2);
		loginService.initUser(user3);
		loginService.initUser(user4);

		// -----------------
		// --模拟登录
		// 使用手机号、邮箱或用户名登录
		// -----------------
		//email、mobile、username,因为手机号这个变动太大
		
		//【界面操作 1:选择类型 2:输入手机或用户或邮箱 3:输入密码】
		//【简单的问题: 112-0123-4567 开头的11位字符串  算手机号码 还是用户名呢】
		//【简单的问题: 112-0123-4567 假设移动开出的系列号码】
		//【手机号码长度就一定是11位,不会像身份证从15到18】
		String type = "moble";
		type = Constant.LOGIN_TYPE_MOBILE;
		
		String identifier = "13805029595";
		identifier = "11201234567";
		String password = "kissme";

		User loginUser = loginService.login(identifier, password);
		if (loginUser != null)
		{
			System.out.println("登录成功,用户信息:" + loginUser.getUsername());
		}
		else
		{
			System.out.println("登录失败,用户名或密码不正确");
		}
		
		
		loginUser = loginService.login2(type, identifier, password);
		if (loginUser != null)
		{
			System.out.println("登录成功,用户信息:" + loginUser.getUsername());
		}
		else
		{
			System.out.println("登录失败,用户名或密码不正确");
		}
	}
}

最后奖励自己一个【鸡腿】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8学习

1 YOLOv8训练自己的数据集 1.1 部署和运行 1.1.1 第一步&#xff0c;下载代码 源码地址 1.1.2 第二步&#xff0c;创建环境 默认已经安装好conda conda create -n yolopy38 python3.8conda activate yolopy38安装所需要的包&#xff0c;先cd到代码目录下 pip install -r…

深眸科技自研工业AI视觉检测设备,检测精度99.9%加速智造进程

随着机器视觉技术的持续升级&#xff0c;国内制造行业不断发展&#xff0c;工艺水平持续优化&#xff0c;产品的数量和种类与日俱增。当前社会将产品质量标准提高&#xff0c;在满足正常的性能使用外&#xff0c;还需要具有良好的表面外观质量。但在工业制造过程中&#xff0c;…

【C语言】【数据存储】用%d打印char类型数据,猜结果是啥

题目代码如下&#xff1a; #include <stdio.h> int main() {char a -1;signed char b-1;unsigned char c-1;printf("a%d,b%d,c%d",a,b,c);return 0; }解题关键&#xff1a; 1.二进制存储&#xff1a;原码&#xff0c;反码&#xff0c;补码 互换 2.截断 3.整型…

密码学入门——Feistel网络

文章目录 参考书一、引入二、Feistel网络计算流程三、Feistel网络的解密四、Feistel网络的性质 参考书 图解密码技术&#xff0c;第三版 一、引入 DES的基本结构是由Horst Feistel设计的&#xff0c;因此也被成为Feistel网络&#xff08;Feistel结构&#xff0c;Feistel密码…

《动手学深度学习 Pytorch版》 6.6 卷积神经网络

import torch from torch import nn from d2l import torch as d2l6.6.1 LeNet LetNet-5 由两个部分组成&#xff1a; - 卷积编码器&#xff1a;由两个卷积核组成。 - 全连接层稠密块&#xff1a;由三个全连接层组成。模型结构如下流程图&#xff08;每个卷积块由一个卷积层、…

分布式电源接入对配电网影响分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

汽车电子——产品标准规范汇总和梳理(电磁兼容)

文章目录 前言 一、辐射发射 二、传导发射 三、沿电源线瞬态传导发射 四、辐射抗扰 五、大电流注入抗扰 六、磁场抗扰 七、便携式发射机抗扰 八、沿电源线瞬态抗扰 九、非电源线瞬态抗扰 十、电快速脉冲群抗扰 十一、静电抗扰 总结 前言 见《汽车电子——产品标准规…

Oracle数据库安装卸载

文章目录 一、数据库版本说明二、软件的下载和安装1.下载软件2.安装数据3.创建数据库4.PLSQL 三、数据库的卸载1.关闭相关服务3.卸载软件3.删除注册信息 四、用户和权限 一、数据库版本说明 1998年Oracle8i&#xff1a;i指internet&#xff0c;表示oracle向互联网发展&#xf…

bootstrap柵格

.col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 (≥768px) .col-md- 中等屏幕 桌面显示器 (≥992px) .col-lg- 大屏幕 大桌面显示器 (≥1200px) 分为12个格子 -后面的1代表占12分子1也就是一份 1.中等屏幕 <div class"container-fluid a">&l…

ARM Linux DIY(十二)NES 游戏

文章目录 前言交叉编译工具链使能 Cnes 游戏模拟器移植游戏手柄调试 前言 很多小伙伴为了不让自己的 V3s 吃灰&#xff0c;进而将其打造成游戏机。 我们 DIY 的板子具备屏幕、扬声器、USB Host&#xff08;可以接游戏手柄&#xff09;&#xff0c;当然也要凑一凑热闹。 交叉编…

SpringBootTest

SpringBootTest注解 --基于SpringBoot2.5.7版本 可以在运行基于Spring Boot的测试的测试类上指定的注释。在常规的Spring TestContext框架之上提供了以下特性: 默认提供SpringBootContextLoader作为ContextLoader&#xff0c;也通过 ContextConfiguration(loader…)来自定义 若…

docker安装zookeeper(单机版)

第一步&#xff1a;拉取镜像 docker pull zookeeper第二步&#xff1a;启动zookeeper docker run -d -e TZ"Asia/Shanghai" -p 2181:2181 -v /home/sunyuhua/docker/zookeeper:/data --name zookeeper --restart always zookeeper

基于改进莱维飞行和混沌映射的粒子群优化BP神经网络预测股票价格研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

1990-2022年上市公司常用控制变量数据(1300+变量)

1990-2022年上市公司常用控制变量数据&#xff08;1300变量&#xff09; 1、时间&#xff1a;1990-2022年 2、指标&#xff1a;共计1391个变量&#xff0c;包括但不限于以下类别&#xff1a;、基本信息&#xff08;性质、行业、地址&#xff09;、股票市场&#xff08;发行、…

阿里云无影云电脑详细介绍_无影优势价格和使用

什么是阿里云无影云电脑&#xff1f;无影云电脑&#xff08;原云桌面&#xff09;是一种快速构建、高效管理桌面办公环境&#xff0c;无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景&#xff0c;阿里云百科分享无影云桌面的详细介绍、租用价格、…

通过指针变量存取一维数组元素

任务描述 本关任务&#xff1a;编写程序用指针变量遍历一个数组。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.指向数组元素的指针的运算 2.如何遍历数组。 视频1 指针与一维数组 指向数组元素的指针的运算 指针与整数的加减运算 有数组和指针变量的…

区块链(3):区块链去中心化

1 点对点同步区块链的流程 流程图如下&#xff1a; 流程讲解&#xff1a; &#xff08;1&#xff09;连接节点 &#xff08;2&#xff09;向该节点请求最新区块 &#xff08;3&#xff09;请求到区块以后&#xff0c;根据返回的最新区块前置hash是否和我本身的区块hash相等…

抖音矩阵系统-60+自媒体平台一键发布-短视频获客系统

当老板做企业的&#xff0c;想在抖音上做生意的&#xff0c;一定一定要开通蓝V企业号线索版来做矩阵。看看我每天的线索都是999&#xff0c;客服都接待不过来&#xff0c;现在还有300个客资未分配&#xff0c;抖音都在推了企业员工号的玩法&#xff0c;你还在质疑什么&#xff…

ubuntu 18.04 中 eBPF samples/bpf 编译

1. history 信息 一次成功编译 bpf 后执行 history 得到的信息&#xff1a; yingzhiyingzhi-Host:~/ex/ex_kernel/linux-5.4$ history1 ls2 mkdir ex3 cd ex4 mkdir ex_kernel5 ls /boot/6 sudo apt install linux-source7 ls /usr/src/8 uname -r9 cd ex_kernel/10…

Nginx配置最佳实践

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…