package com;
import lombok.SneakyThrows;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
public class QQData {
//region 格式化数据
public static int toInt(String s) {
if (QQVer.testPara(s)) {
return 0;
}
return Integer.parseInt(s);
}
public static double toDouble(String d1) {
if (QQVer.testPara(d1)) {
return 0;
}
return Double.parseDouble(d1);
}
public static boolean isNotEmpty(Object object) {
return object != null && !object.equals("") && !object.equals("null");
}
public static String twoDouble(double d1) {
DecimalFormat df2 = new DecimalFormat("#0.00");
return df2.format(d1);
}
public static String oneDouble(double d1) {
DecimalFormat df2 = new DecimalFormat("#0.0");
return df2.format(d1);
}
//保留两位小数
public static double formatDouble(double d) {
BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
return bg.doubleValue();
}
public static String twoDouble(String d1) {
return twoDouble(toDouble(d1));
}
//获取总页数
public static int getTotalPage(int totalCount, int pageCount) {
if (pageCount == 0) {
return 0;
}
int totalPage = totalCount / pageCount;
if (totalCount % pageCount > 0) {
totalPage += 1;
}
return totalPage;
}
//随机数
public static int random(int min, int max) {
Random ran = new Random();
return ran.nextInt(max - min + 1) + min;
}
public static String getRandStr(int n) {
Random random = new Random();
String sRand = "";
for(int i = 0; i < n; ++i) {
String rand = String.valueOf(random.nextInt(10));
sRand = sRand + rand;
}
return sRand;
}
//获取生成20位随机数
public static String random20() {
char[] CharArray = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
StringBuilder sCode = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 20; i++) {
sCode.append(CharArray[random.nextInt(CharArray.length)]);
}
return sCode.toString();
}
//获取生成84位随机数
public static String random84() {
char[] CharArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '*', '/', '<', '>'};
StringBuilder sCode = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 84; i++) {
sCode.append(CharArray[random.nextInt(CharArray.length)]);
}
return sCode.toString();
}
public static String getPhone(){
List<Integer> ltCode = new ArrayList<>();
ltCode.add(134);
ltCode.add(135);
ltCode.add(136);
ltCode.add(137);
ltCode.add(138);
ltCode.add(139);
ltCode.add(150);
ltCode.add(151);
ltCode.add(152);
ltCode.add(157);
ltCode.add(158);
ltCode.add(159);
ltCode.add(180);
ltCode.add(181);
ltCode.add(182);
ltCode.add(183);
ltCode.add(184);
ltCode.add(185);
ltCode.add(186);
ltCode.add(187);
return ltCode.get(random(0, 19)) + String.valueOf(random(1000, 9999)) + String.valueOf(random(1000, 9999));//手机号
}
//endregion
//region 对象
@SneakyThrows
public static <T> T copy(Object source, Class<T> target) {
T t = target.newInstance();
BeanUtils.copyProperties(source, t);
return t;
}
public static <T> List<T> copyList(List<?> sourceList, Class<T> target) {
return sourceList.stream().map(s -> copy(s, target)).collect(Collectors.toList());
}
public static <T> Set<T> copySet(Set<?> sourceList, Class<T> target) {
return sourceList.stream().map(s -> copy(s, target)).collect(Collectors.toSet());
}
//复制对象属性到另一个对象
public static void copyProperties(Object source,Object target){
BeanUtils.copyProperties(source,target);
}
//endregion
//region 日期
//加减后的日期
public static String getDate(String virDate, int addDay) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(Objects.requireNonNull(QQDate.toD(virDate)));
calendar.add(Calendar.DATE, addDay);
return dateFormat.format(calendar.getTime());
}
//endregion
//region base64
//通过图片地址,转成Base64格式
public static String getBase64Url(String imgUrl) {
if(QQVer.testPara(imgUrl)){
return "";
}
InputStream fis = null;
ByteArrayOutputStream out = new ByteArrayOutputStream();
String base64 = "";
String data = "";
try {
URL url = new URL(imgUrl);
fis = url.openStream();
byte[] bytes = new byte[1024];
int len;
while ((len = fis.read(bytes)) != -1) {
for (int i = 0; i < len; i++) {
bytes[i] = (byte) (bytes[i] ^ 5);//对字节运算
}
out.write(bytes, 0, len);
}
byte[] result = out.toByteArray();
base64 = Base64.getEncoder().encodeToString(result);//通过util包中的Base64类对字节数组进行base64编码
data = "data:image/png;base64," + base64;
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return data;
}
//endregion
//region 数据
public static final String[] surname =
{"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦",
"尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水",
"窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任",
"袁", "柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬",
"安", "常", "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄", "和", "穆",
"萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝", "明", "臧", "计"};
private static final String boyName = "伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽";
public static String getName(int index, int count) {
//获得一个随机的姓氏
String name = surname[index];
int index1 = (int) (0 + Math.random() * (boyName.length() - 2 + 1));
int index2 = (int) (0 + Math.random() * (boyName.length() - 2 + 1));
/* 从常用字中选取一个或两个字作为名 */
if (count > 0) {
name += boyName.charAt(index1) + boyName.substring(index2, index2 + 1);
} else {
name += boyName.substring(index1, index1 + 1);
}
return name;
}
//随机生成姓名
public static String GetManName() {
int o = (int) (0 + Math.random() * (surname.length - 2 + 1)); //随机姓
int q = (int) (0 + Math.random() * (2 - 1 + 1)); //随机姓
return getName(o, q);
}
public static String getPhoneNum() {
String[] start = {"133", "149", "153", "173", "177",
"180", "181", "189", "199", "130", "131", "132",
"145", "155", "156", "166", "171", "175", "176", "185", "186", "166", "134", "135",
"136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "172",
"178", "182", "183", "184", "187", "188", "198", "170", "171"};
//随机出真实号段 使用数组的length属性,获得数组长度,
//通过Math.random()*数组长度获得数组下标,从而随机出前三位的号段
String phoneFirstNum = start[(int) (Math.random() * start.length)];
//随机出剩下的8位数
String phoneLastNum = "";
//定义尾号,尾号是8位
final int LENPHONE = 8;
//循环剩下的位数
for (int i = 0; i < LENPHONE; i++) {
//每次循环都从0~9挑选一个随机数
phoneLastNum += (int) (Math.random() * 10);
}
//最终将号段和尾数连接起来
return phoneFirstNum + phoneLastNum;
}
//endregion
/// <summary>
/// 金额数字转大写(带小数点)
/// </summary>
public static String toChinese(double price) {
//数字转大写
String[] n = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String[] d = {"", "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"};
String[] m = {"零拾", "零佰", "零仟", "零万", "零亿", "亿万", "零元", "零零", "零角", "零分"};
String[] h = {"零", "零", "零", "万", "亿", "亿", "元", "零", "零", ""};
//不同位置的数字要加单位
List<String> needReplace = Arrays.asList(m);
List<String> afterReplace = Arrays.asList(h);
String e = price % 1 == 0 ? "整" : ""; //金额是整数,加一个“整”结尾
StringBuilder re = new StringBuilder();
int a = (int) (price * 100);
int k = 1;
while (a != 0) {
//初步转换大小写
re.insert(0, n[a % 10] + d[k]);
a = a / 10;
k = k < 11 ? k + 1 : 4;
}
String dd = re.toString();
// String need = needReplace.stream().filter(dd::contains).findFirst().orElse(null);//.Where(tb = > re.Contains(tb)).FirstOrDefault<string> ();
// while (need != null) {
// int i = needReplace.indexOf(need);
// re = new StringBuilder(re.toString().replace(needReplace.get(i), afterReplace.get(i)));
// need = needReplace.stream().filter(dd::contains).findFirst().orElse(null);//.Where(tb = > re.Contains(tb)).FirstOrDefault<string> ();
// }//循环排除特殊情况
// re = new StringBuilder(re.toString().equals("") ? "零元" : re + e);
return dd.toString();
}
//获取IP地址
public static String getIpAddr(HttpServletRequest request) {
String ipAddress = null;
ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1")) {
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException var4) {
var4.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
if (ipAddress != null && ipAddress.length() > 15 && ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
return ipAddress;
}
public static String getPsw(int len) {
// 1、定义基本字符串baseStr和出参password
String password = null;
String baseStr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
boolean flag = false;
// 2、使用循环来判断是否是正确的密码
while (!flag) {
// 密码重置
password = "";
// 个数计数
int a = 0,b = 0,c = 0,d = 0;
for (int i = 0; i < len; i++) {
int rand = (int) (Math.random() * baseStr.length());
password+=baseStr.charAt(rand);
if (0<=rand && rand<=9) {
a++;
}
if (10<=rand && rand<=35) {
b++;
}
if (36<=rand && rand<=61) {
c++;
}
if (62<=rand && rand<baseStr.length()) {
d++;
}
}
// 3、判断是否是正确的密码(4类中仅一类为0,其他不为0)
flag = (a*b*c!=0&&d==0)||(a*b*d!=0&&c==0)||(a*c*d!=0&&b==0)||(b*c*d!=0&&a==0);
}
return password;
}
}
数据工具类
于 2023-10-13 17:01:13 首次发布