Java-亂資料生成器(造資料)

2022-08-30 21:01:51

概述

簡單易用的亂資料生成器。一般用於開發和測試階段的資料填充、模擬、模擬研究、演示等場景。可以整合到各種型別的java專案中使用。

優點

  • 非常輕量級(不到1M),容易整合,無需過多第三方依賴
  • 簡單方便,無需編寫冗餘程式碼
  • 生成的亂資料比較接近真實資料

支援的亂資料型別

  • 日期時間
  • 隨機日期
  • 隨機時間
  • 隨機時間戳
  • 隨機時區名稱

地理

  • 隨機省份和城市
  • 隨機國家或地區(基於ISO 3166-1標準)
  • 虛擬經緯度
  • 隨機郵編
  • 虛擬聯絡地址
  • 隨機固話區號
  • 虛擬固話號碼

網際網路

  • 虛擬郵箱地址
  • 虛擬域名
  • 虛擬靜態URL
  • 虛擬IPv4地址
  • 虛擬IPv6地址
  • 虛擬網路卡MAC地址
  • 隨機強密碼
  • 隨機User-Agent
  • 隨機埠號
  • 虛擬app名稱
  • 虛擬app bundle id
  • 虛擬app版本號

個人資訊

  • 虛擬中文人名
  • 虛擬英文人名
  • 虛擬身份證號碼
  • 虛擬網路暱稱
  • 虛擬拼音網路暱稱
  • 虛擬手機號碼
  • 虛擬QQ號碼
  • 虛擬姓名圖片檔案
  • 虛擬非主流QQ網名
  • 隨機民族名稱

教育

  • 隨機學歷
  • 虛擬小學名稱、年級、班級
  • 虛擬中學名稱、年級、班級
  • 隨機高校及專業名稱

金融

  • 隨機股票名稱+股票程式碼
  • 虛擬日K線資料
  • 隨機開放式基金名稱+基金程式碼
  • 隨機貨幣資訊
  • 虛擬銀行卡(借記卡及信用卡)號碼

體育

  • 隨機六大足球聯賽球隊名稱
  • 隨機籃球聯賽球隊名稱
  • 隨機國家及地區的足球代表隊名稱

其它

  • 亂數字
  • 隨機漢字
  • 隨機成語
  • 隨機唐詩
  • 虛擬車牌號
  • 隨機熱門手機型號
  • 隨機RGB顏色值
  • 隨機HEX顏色值
  • 隨機中文短句
  • 隨機英文文字
  • 虛擬企業及部門名稱
  • 隨機行銷號文案
  • 隨機ISBN
  • 隨機EAN商品編碼
  • 隨機行業分類
  • 隨機統一社會信用程式碼
  • 資料生成工具

設定依賴

<dependency>
    <groupId>com.apifan.common</groupId>
    <artifactId>common-random</artifactId>
    <version>1.0.16</version>
</dependency>

基礎用法

亂數字

//生成1個1~101(不含)之間的隨機整數
int a = NumberSource.getInstance().randomInt(1, 101);

//生成8個1~101(不含)之間的隨機整數
int[] b = NumberSource.getInstance().randomInt(1, 101, 8);

//生成1個10000000000~20000000001(不含)之間的隨機長整數
long c = NumberSource.getInstance().randomLong(10000000000L, 20000000001L);

//生成9個10000000000~20000000001(不含)之間的隨機長整數
long[] d = NumberSource.getInstance().randomLong(10000000000L, 20000000001L, 9);

//生成1個0.01~0.51(不含)之間的隨機整數
double e = NumberSource.getInstance().randomDouble(0.01D, 0.51D);

//生成8個0.01~0.51(不含)之間的隨機整數
double[] f = NumberSource.getInstance().randomDouble(0.01D, 0.51D, 8);

//生成隨機百分比
BigDecimal percent = NumberSource.getInstance().randomPercent();

隨機漢字

//生成1個隨機漢字
String i = OtherSource.getInstance().randomChinese();

//生成4個隨機漢字
String j = OtherSource.getInstance().randomChinese(4);

隨機成語

String idiom = OtherSource.getInstance().randomChineseIdiom();

隨機唐詩

Poem p = OtherSource.getInstance().randomTangPoem();

隨機人名

中文名
//生成1個隨機中文人名(性別隨機)
String k = PersonInfoSource.getInstance().randomChineseName();

//生成1個隨機男性中文人名
String k2 = PersonInfoSource.getInstance().randomMaleChineseName();

//生成1個隨機女性中文人名
String k3 = PersonInfoSource.getInstance().randomFemaleChineseName();
英文名
//生成1個隨機英文人名
String l = PersonInfoSource.getInstance().randomEnglishName();
生成姓名頭像
  • 該功能可以根據使用者姓名快速生成各類網站、app的使用者頭像
  • 背景顏色隨機,資料來源取自最近十幾年來廣受歡迎的顏色,詳情參見: Colors of the Year
  • 支援使用自定義TTF字型,但是需要使用者自行保證字型版權合法以避免糾紛
  • 該功能不支援在Android執行環境中使用(因為缺少awt)
//姓名
String name = PersonInfoSource.getInstance().randomChineseName();
//頭像檔案儲存路徑
String targetPath = "/home/user/picture/" + name + ".png;

//使用預設的Dialog字型
PersonInfoSource.getInstance().generateNamePicture(name, targetPath);

//使用自定義的字型
String font = "/home/user/font/SourceHanSansCN-Normal.ttf";
PersonInfoSource.getInstance().generateNamePicture(name, targetPath, font);

隨機生成符合規則的虛擬身份證號碼

//生成1個隨機的虛擬身份證號碼,地區為廣西壯族自治區,男性,出生日期在1990年11月11日至1999年12月12日之間
LocalDate beginDate = LocalDate.of(1990,11,11);
LocalDate endDate = LocalDate.of(1999,12,12); 
String id1 = PersonInfoSource.getInstance().randomMaleIdCard("廣西壯族自治區", beginDate, endDate);

//生成1個隨機的虛擬身份證號碼,地區為河北省,女性,出生日期在2001年1月11日至2008年2月22日之間
LocalDate beginDate2 = LocalDate.of(2001,1,11);
LocalDate endDate2 = LocalDate.of(2008,2,22);
String id2 = PersonInfoSource.getInstance().randomFemaleIdCard("河北省", beginDate2, endDate2);

//生成1個隨機的虛擬身份證號碼,地區為廣西壯族自治區,男性,年齡為18歲
String id3 = PersonInfoSource.getInstance().randomMaleIdCard("廣西壯族自治區", 18);

//生成1個隨機的虛擬身份證號碼,地區為河北省,女性,年齡為19歲
String id4 = PersonInfoSource.getInstance().randomFemaleIdCard("河北省", 19);

注意:

  • 身份證號碼前6位地區碼資料取自民政部網站2019年公開資料
  • 隨機生成的虛擬身份證號碼符合校驗規則,但有可能與真實號碼相同(純屬巧合)

隨機虛擬銀行卡號碼

//生成1個隨機虛擬VISA信用卡號碼
String cc1 = PersonInfoSource.getInstance().randomCreditCardNo(CreditCardType.Visa);

//生成1個隨機虛擬MasterCard信用卡號碼
String cc2 = PersonInfoSource.getInstance().randomCreditCardNo(CreditCardType.MasterCard);

//生成1個隨機虛擬American Express信用卡號碼
String cc3 = PersonInfoSource.getInstance().randomCreditCardNo(CreditCardType.Amex);

//生成1個隨機虛擬銀聯信用卡號碼
String cc4 = PersonInfoSource.getInstance().randomCreditCardNo(CreditCardType.UnionPay);

//生成1個隨機虛擬JCB信用卡號碼
String cc5 = PersonInfoSource.getInstance().randomCreditCardNo(CreditCardType.JCB);

//生成1個隨機虛擬借記卡(儲蓄卡)號碼
String dbc = PersonInfoSource.getInstance().randomDebitCardNo();

注意:

  • 隨機生成的虛擬銀行卡號碼只是字首和位數符合規則,不會與現實中的真實卡號產生重合,無法用於支付,僅供模擬測試/模擬/專案演示等用途

隨機中國大陸手機號

//生成1個隨機中國大陸手機號
String m = PersonInfoSource.getInstance().randomChineseMobile();

隨機郵箱地址

//生成1個隨機郵箱地址,字尾隨機,郵箱使用者名稱最大長度為10
String n1 = InternetSource.getInstance().randomEmail(10);

//生成1個隨機郵箱地址,字尾為163.com,郵箱使用者名稱最大長度為10
String n2 = InternetSource.getInstance().randomEmail(10, "163.com");

隨機域名

//生成1個隨機域名,域名最大長度為16
String dm = InternetSource.getInstance().randomDomain(16);

隨機ipv4地址

//生成1個隨機公網IPv4地址
String pub = InternetSource.getInstance().randomPublicIpv4();

//生成1個隨機私有(內網)IPv4地址
String prv = InternetSource.getInstance().randomPrivateIpv4();

隨機ipv6地址

//生成1個隨機ipv6地址
String ipv6 = InternetSource.getInstance().randomIpV6();

隨機埠號

//生成1個隨機埠號
int port = InternetSource.getInstance().randomPort();

隨機app資訊

//生成1個隨機App名稱
String appName = InternetSource.getInstance().randomAppName();

//生成1個隨機App Bundle ID
String appBundleID = InternetSource.getInstance().randomAppBundleId();

//生成1個隨機App版本號
String appVersionCode = InternetSource.getInstance().randomAppVersionCode();

隨機靜態url

//生成1個隨機靜態url,字尾為jpg
String url = InternetSource.getInstance().randomStaticUrl("jpg");

隨機日期

//生成1個2020年的隨機日期,日期格式為yyyy-MM-dd
String d1 = DateTimeSource.getInstance().randomDate(2020, "yyyy-MM-dd");

//生成1個2020年1月2日之後的隨機日期,日期格式為yyyy-MM-dd
String d2 = DateTimeSource.getInstance().randomFutureDate(LocalDate.of(2020,1,2), "yyyy-MM-dd");

//生成1個今天(基於系統時間判斷)之後的隨機日期,日期格式為yyyy-MM-dd
String d3 = DateTimeSource.getInstance().randomFutureDate("yyyy-MM-dd");

//生成1個2020年1月2日之前1年內的隨機日期,日期格式為yyyy-MM-dd
String d4 = DateTimeSource.getInstance().randomPastDate(LocalDate.of(2020,1,2), "yyyy-MM-dd");

//生成1個今天(基於系統時間判斷)之前1年內的隨機日期,日期格式為yyyy-MM-dd
String d5 = DateTimeSource.getInstance().randomPastDate("yyyy-MM-dd");

//生成1個2020年1月2日之前10年內的隨機日期,日期格式為yyyy-MM-dd
String dd = DateTimeSource.getInstance().randomPastDate(LocalDate.of(2020,1,2), 3650, "yyyy-MM-dd");

//生成1個2000年1月11日至2010年2月22日範圍之間的隨機日期,日期格式為yyyy-MM-dd
LocalDate beginDate = LocalDate.of(2000,1,11);
LocalDate endDate = LocalDate.of(2010,2,22);
String d6 = DateTimeSource.getInstance().randomDate(beginDate, endDate, "yyyy-MM-dd");

隨機時間

//生成過去7天範圍內的隨機時間
LocalDateTime time1 = DateTimeSource.getInstance().randomPastTime(7);

//生成未來7天範圍內的隨機時間
LocalDateTime time2 = DateTimeSource.getInstance().randomFutureTime(7);

//生成2020年2月14日當天範圍內的隨機時間
LocalDateTime time3 = DateTimeSource.getInstance().randomTime(2020, 2, 14);

//生成過去100秒範圍內的隨機時間
LocalDateTime time4 = DateTimeSource.getInstance().randomPastTime(LocalDateTime.now(), 100);

//生成未來100秒範圍內的隨機時間
LocalDateTime time5 = DateTimeSource.getInstance().randomFutureTime(LocalDateTime.now(), 100);

隨機時間戳

//生成1個當天範圍內的隨機時間戳
long ts1 = DateTimeSource.getInstance().randomTimestamp(LocalDate.now());

//生成1個2020年3月6日範圍內的隨機時間戳
long ts2 = DateTimeSource.getInstance().randomTimestamp(LocalDate.of(2020, 3, 6));

//生成1個介於2020年3月6日12:00:00至2020年3月6日12:30:00之間的隨機時間戳
LocalDateTime begin = LocalDateTime.of(2020, 3, 6, 12, 0, 0);
LocalDateTime end = LocalDateTime.of(2020, 3, 6, 12, 30, 0);
long ts3 = DateTimeSource.getInstance().randomTimestamp(begin, end);

//生成1個2020年3月6日12:00:00之後180秒內的隨機時間戳
LocalDateTime base1 = LocalDateTime.of(2020, 3, 6, 12, 0, 0);
long ts4 = DateTimeSource.getInstance().randomFutureTimestamp(base1, 180);

//生成1個2020年3月7日13:00:00之前120秒內的隨機時間戳
LocalDateTime base2 = LocalDateTime.of(2020, 3, 7, 13, 0, 0);
long ts5 = DateTimeSource.getInstance().randomPastTimestamp(base2, 120);

隨機時區名稱

//生成1個隨機時區名稱
String timezone = DateTimeSource.getInstance().randomTimezoneName();

隨機強密碼

//生成1個隨機強密碼,長度為16,無特殊字元
String pwd1 = PersonInfoSource.getInstance().randomStrongPassword(16, false);

//生成1個隨機強密碼,長度為16,有特殊字元
String pwd2 = PersonInfoSource.getInstance().randomStrongPassword(16, true);

隨機地址

//隨機獲取省份
String prv = AreaSource.getInstance().randomProvince();

//隨機獲取城市(省份+城市,以逗號為分隔符)
String city = AreaSource.getInstance().randomCity(",");

//隨機獲取郵編
String zipCode = AreaSource.getInstance().randomZipCode();

//生成1個隨機中國大陸詳細地址
String addr = AreaSource.getInstance().randomAddress();

隨機國家或地區

//隨機獲取1個編碼首字母為b的國家或地區
CountryOrRegionCode code0 = AreaSource.getInstance().randomCountryOrRegionCode("b");

//隨機獲取1個國家或地區(不限首字母)
CountryOrRegionCode code1 = AreaSource.getInstance().randomCountryOrRegionCode();

隨機經緯度

//隨機生成1個緯度
double lat = AreaSource.getInstance().randomLatitude();

//隨機生成1個經度
double lng = AreaSource.getInstance().randomLongitude();

隨機固話

//隨機固話區號(省級行政區名稱不需要包含字尾)
String phoneCode = AreaSource.getInstance().randomPhoneCode("湖南");

//隨機固話號碼(使用-作為分隔符,預設的分隔符是空格)
String phoneNumber = AreaSource.getInstance().randomPhoneNumber("廣東", "-");

隨機中國大陸車牌號

//生成1個隨機中國大陸車牌號(新能源車型)
String n1 = OtherSource.getInstance().randomPlateNumber(true);

//生成1個隨機中國大陸車牌號(非新能源車型)
String n2 = OtherSource.getInstance().randomPlateNumber();

隨機網路暱稱

//生成1個隨機英文網路暱稱,最大長度為8個字元
String nickName = PersonInfoSource.getInstance().randomNickName(8);

//生成1個隨機漢字網路暱稱,最大長度為8個漢字
String nickName2 = PersonInfoSource.getInstance().randomChineseNickName(8);

//基於隨機漢字網路暱稱生成1個拼音網路暱稱,最大長度為4個漢字
String nickName3 = PersonInfoSource.getInstance().randomPinyinNickName(4);

隨機qq資訊

//生成1個隨機QQ號
String qq = PersonInfoSource.getInstance().randomQQAccount();

//生成1個隨機非主流QQ網名
String nickName = PersonInfoSource.getInstance().randomQQNickName();

隨機民族名稱

String ethnicName = OtherSource.getInstance().randomEthnicName();

隨機教育背景資訊

//隨機獲取學歷
String degree = EducationSource.getInstance().randomDegree();

//隨機獲取本科高校名稱
String college = EducationSource.getInstance().randomCollege();

//隨機高校專業名稱
String majorName = EducationSource.getInstance().randomMajorName();

//隨機獲取小學名稱
String primarySchoolName = EducationSource.getInstance().randomPrimarySchoolName();

//隨機獲取小學年級
String primarySchoolGrade = EducationSource.getInstance().randomPrimarySchoolGrade();

//隨機獲取中學名稱
String highSchoolName = EducationSource.getInstance().randomHighSchoolName();

//隨機獲取中學年級
String highSchoolGrade = EducationSource.getInstance().randomHighSchoolGrade();

//隨機班級名稱
String className = EducationSource.getInstance().randomClassName();

隨機公司及部門名稱

//隨機生成1個公司名稱,地區字首為北京
String companyName = OtherSource.getInstance().randomCompanyName("北京");

//隨機生成1個公司部門名稱
String department = OtherSource.getInstance().randomCompanyDepartment();

隨機中文短句

//隨機生成1條中文短句
String sentence = OtherSource.getInstance().randomChineseSentence();

隨機英文文字

//隨機生成1條英文文字,包含10個單詞
String text = OtherSource.getInstance().randomEnglishText(10);

隨機行銷號

String title = OtherSource.getInstance().randomNonsenseTitle("星期一", "下雨");
String content = OtherSource.getInstance().randomNonsense("星期一", "下雨");

隨機行業分類

OtherSource.getInstance().randomEconomicCategory();

說明:行業分類編碼和名稱來自國家統計局釋出的公開資料

統一社會信用程式碼

OtherSource.getInstance().randomSocialCreditCode();

隨機EAN

//隨機ISBN,返回結果需要分隔符-,格式例如:978-7-XXXX-XXXX-X
String isbn1 = OtherSource.getInstance().randomISBN(true);

//隨機ISBN,返回結果不需要分隔符,格式例如:9787XXXXXXXXX
String isbn2 = OtherSource.getInstance().randomISBN(false);

//隨機國際商品編碼,格式例如:691XXXXXXXXXX
String ean = OtherSource.getInstance().randomEAN();

說明:

  • 本程式隨機生成的EAN編碼長度為13位
  • 本程式隨機生成的EAN編碼符合標準校驗規則,僅供模擬測試/模擬/專案演示等用途,並不表示現實中真實存在該編碼對應的商品(如有雷同純屬巧合)

隨機useragent

//隨機生成1個PC User-Agent
String ua1 = InternetSource.getInstance().randomPCUserAgent();

//隨機生成1個Android User-Agent
String ua2 = InternetSource.getInstance().randomAndroidUserAgent();

//隨機生成1個iOS User-Agent
String ua3 = InternetSource.getInstance().randomIOSUserAgent();

隨機網路卡mac地址

//隨機生成1個網路卡MAC地址,使用:作為分隔符
String mac = InternetSource.getInstance().randomMacAddress(":");

隨機顏色值

//隨機生成1個RGB顏色值
int[] rgb = OtherSource.getInstance().randomRgbColor();

//隨機生成1個16進位制(HEX)顏色值
String hex = OtherSource.getInstance().randomHexColor();

股票名稱和股票程式碼

//隨機股票資訊(滬A+深A+創業板+科創版)
String[] stock = FinancialSource.getInstance().randomStock();
String stockName = stock[0];
String stockCode = stock[1];

//隨機股票資訊(港股)
String[] hkStock = FinancialSource.getInstance().randomHKStock();
String hkStockName = hkStock[0];
String hkStockCode = hkStock[1];

//隨機股票資訊(新三板)
String[] xsbStock = FinancialSource.getInstance().randomXsbStock();
String xsbStockName = xsbStock[0];
String xsbStockCode = xsbStock[1];

//隨機股票資訊(北交所)
String[] bseStock = FinancialSource.getInstance().randomBseStock();
String bseStockName = bseStock[0];
String bseStockCode = bseStock[1];

開放式基金名稱和基金程式碼

String[] fund = FinancialSource.getInstance().randomFund();
String fundName = fund[0];
String fundCode = fund[1];

日k線資料

//隨機生成20210201~20210228日期範圍內的K線資料,起始價格為100,單日最大漲幅10%,單日最大跌幅-10%
List<KChartData> kList = FinancialSource.getInstance().randomDailyKChartData(100, 0.1, -0.1, "20210201", "20210228");

貨幣

//隨機獲取一種貨幣資訊
CurrencyInfo ci = FinancialSource.getInstance().randomCurrencyInfo();

足球聯賽球隊名稱

//英超
SportSource.getInstance().randomFootballTeam(CompetitionType.PREMIER_LEAGUE);

//西甲
SportSource.getInstance().randomFootballTeam(CompetitionType.LA_LIGA);

//德甲
SportSource.getInstance().randomFootballTeam(CompetitionType.BUNDESLIGA);

//意甲
SportSource.getInstance().randomFootballTeam(CompetitionType.SERIE_A);

//法甲
SportSource.getInstance().randomFootballTeam(CompetitionType.LIGUE_1);

//荷甲
SportSource.getInstance().randomFootballTeam(CompetitionType.EREDIVISIE);

籃球聯賽球隊名稱

//CBA
SportSource.getInstance().randomBasketballTeam(CompetitionType.CBA);

//NBA
SportSource.getInstance().randomBasketballTeam(CompetitionType.NBA);

國家及地區的足球代表隊

//(亞洲足聯範圍內)隨機足球隊名稱
SportSource.getInstance().randomFootballTeam(FootballConfederation.AFC);

//(歐洲足聯範圍內)隨機足球隊名稱
SportSource.getInstance().randomFootballTeam(FootballConfederation.UEFA);

//隨機足球隊名稱(不限足球聯合會)
SportSource.getInstance().randomFootballTeam();

存取 Wikipedia網頁 可以檢視完整的足球聯合會列表資訊。

熱門手機型號

OtherSource.getInstance().randomMobileModel();

資料生成工具

此工具類支援自定義生成符合業務需求的亂資料,範例如下:

//準備欄位定義
//欄位name:隨機姓名
DataField df1 = new DataField("name", () -> PersonInfoSource.getInstance().randomChineseName());
//欄位birthDate:隨機日期
DataField df2 = new DataField("birthDate", () -> DateTimeSource.getInstance().randomPastDate("yyyy-MM-dd"));
//欄位salary:亂數字
DataField df3 = new DataField("salary", () -> NumberSource.getInstance().randomInt(5000, 18000));
List<DataField> fieldList = Lists.newArrayList(df1, df2, df3);

//設定數量
int total = 10;

//生成JSON
String json = DataUtils.generateJson(fieldList, total); 

//生成CSV 
String csv = DataUtils.generateCsv(fieldList, total); 

//生成SQL之前先要指定表名
String tableName = "user";
//生成SQL插入語句
String sql = DataUtils.generateJson(fieldList, tableName, total);

更多內容