我的第一个开源项目:从0到1,我在GitHub写下的成长印记

文章目录

    • 每日一句正能量
    • 前言
    • [✨ 一、写在前面:那天我点下了 "Create Repository"](#✨ 一、写在前面:那天我点下了 “Create Repository”)
    • [🚀 二、为什么我要做这件事?](#🚀 二、为什么我要做这件事?)
    • [🛠️ 三、CommonUtilLibrary 是什么?](#🛠️ 三、CommonUtilLibrary 是什么?)
    • [⚡ 四、第一次 Star 和第一次 Issue](#⚡ 四、第一次 Star 和第一次 Issue)
    • [🧭 五、我从中学到了什么?](#🧭 五、我从中学到了什么?)
      • [1. **工程意识的提升**](#1. 工程意识的提升)
      • [2. **技术沟通能力**](#2. 技术沟通能力)
      • [3. **自驱力 & 成就感**](#3. 自驱力 & 成就感)
    • [📦 六、项目目前的状态与进展](#📦 六、项目目前的状态与进展)
    • [📸 七、项目结构截图](#📸 七、项目结构截图)
    • [🧩 八、建议每一个开发者都拥有自己的开源仓库](#🧩 八、建议每一个开发者都拥有自己的开源仓库)
    • [📬 九、结语:一颗 Star,一段成长](#📬 九、结语:一颗 Star,一段成长)

每日一句正能量

没有到手的东西,总是比到手的稀奇,但不一定比我们已拥有的更好。有些事知道了就好,不必去多说。有些人认识了也就好,不必去深交。你若是找不到坚持下去的理由,那么你就找一个重新开始的理由,生活本来就这么简单。


前言

"你写的第一行代码,或许会被忘记。但你第一个开源项目的星星,却可能照亮你的整个开发旅程。"


✨ 一、写在前面:那天我点下了 "Create Repository"

很多年后回头看,我依然清晰记得那一刻。

那是一个再普通不过的深夜,桌上泡面还冒着热气,我却一边打着哈欠一边兴奋地敲下:

bash 复制代码
git init

项目名叫 CommonUtilLibrary ,一个集成了日期处理、字符串扩展、通用加解密、线程安全工具等模块的 Java 工具集,托管在 GitHub 上:https://github.com/AbrahamCaiJin/CommonUtilLibrary

说实话,这并不是一个"惊艳"的项目。但对我而言,它就是我的「开源初体验」。


🚀 二、为什么我要做这件事?

还记得我写这库的初衷,仅仅是因为------工作中重复写了太多重复逻辑,比如:

  • SharePreference缓存数据 → AppSharePreferenceMgr
  • 银行卡管理 → BankCheck
  • 提供App数据清理工作的类 → AppCleanMgr
  • 缓存工具类 → AppACache
  • App应用退出 → AppExit2Back
  • 管理和回收Activity → AppDavikActivityMgr
  • 获取App应用版本信息 → AppApplicationMgr
  • 软键盘管理 → AppKeyBoardMgr
  • App网络管理 → AppNetworkMgr
  • 手机管理工具类 → AppPhoneMgr
  • 反射工具类 → AppReflectionMgr
  • 获取本地指定资源信息 → AppResourceMgr
  • 字符串判断工具类 → AppStringUtils
    ... ...

这些逻辑虽然不复杂,但在多个项目中高频出现,写着写着就有了个想法:

👉 何不把这些公共方法统一整理、封装并模块化?

而这时,"开源"这两个字像一道光突然照进来:

"能不能不只是自己用,还分享给其他开发者?"


🛠️ 三、CommonUtilLibrary 是什么?

我给它的定义是:"一个轻量、易用的 Java 通用工具集。"

主要模块包括:

模块名 功能概述
AppDateMgr 日期计算、格式转换、时间区间等
AppStringUtils 字符串非空判断、格式标准化
EncryptUtils AES、RSA、Base64、MD5 等加解密封装
JsonUtils 封装了 Jackson 与 Gson 的通用转换接口
SafeTools 提供线程安全容器初始化方法、原子操作封装

👆 部分代码如下

BankCheck.java

java 复制代码
package com.jingewenku.abrahamcaijin.commonutil;


import com.jingewenku.abrahamcaijin.commonutil.klog.KLog;

/**
 * @Description:主要功能:银行卡管理
 * @Prject: CommonUtilLibrary
 * @Package: com.jingewenku.abrahamcaijin.commonutil
 * @author: AbrahamCaiJin
 * @date: 2017年05月15日 11:14
 * @Copyright: 个人版权所有
 * @Company:
 * @version: 1.0.0
 */
/*
 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,
 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
 该校验的过程:
 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
 例如,卡号是:5432123456788881
 则奇数、偶数位(用红色标出)分布:5432123456788881
 奇数位和=35
 偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
 最后35+35=70 可以被10整除,认定校验通过。
 */
public class BankCheck {
    /*
 * 银行卡是由"发卡行标识代码 + 自定义 + 校验码 "等部分组成的 BIN号 银联标准卡与以往发行的银行卡最直接的区别就是其卡号前6位数字的不同。
 * 银行卡卡号的前6位是用来表示发卡银行或机构的,称为"发卡行识别码"(Bank Identification Number,缩写为"BIN")。
 * 银联标准卡是由国内各家商业银行
 * (含邮储、信用社)共同发行、符合银联业务规范和技术标准、卡正面右下角带有"银联"标识(目前,新发行的银联标准卡一定带有国际化的银联新标识
 * ,新发的非银联标准卡使用旧的联网通用银联标识)、 卡号前6位为622126至622925之一的银行卡,是中国银行卡产业共有的民族品牌。
 */
    // BIN号
    private final static String[] BANKBIN = { "621098", "622150", "622151",
        "622181", "622188", "955100", "621095", "620062", "621285",
        "621798", "621799", "621797", "620529", "622199", "621096",
        "621622", "623219", "621674", "623218", "621599", "370246",
        "370248", "370249", "427010", "427018", "427019", "427020",
        "427029", "427030", "427039", "370247", "438125", "438126",
        "451804", "451810", "451811", "458071", "489734", "489735",
        "489736", "510529", "427062", "524091", "427064", "530970",
        "530990", "558360", "620200", "620302", "620402", "620403",
        "620404", "524047", "620406", "620407", "525498", "620409",
        "620410", "620411", "620412", "620502", "620503", "620405",
        "620408", "620512", "620602", "620604", "620607", "620611",
        "620612", "620704", "620706", "620707", "620708", "620709",
        "620710", "620609", "620712", "620713", "620714", "620802",
        "620711", "620904", "620905", "621001", "620902", "621103",
        "621105", "621106", "621107", "621102", "621203", "621204",
        "621205", "621206", "621207", "621208", "621209", "621210",
        "621302", "621303", "621202", "621305", "621306", "621307",
        "621309", "621311", "621313", "621211", "621315", "621304",
        "621402", "621404", "621405", "621406", "621407", "621408",
        "621409", "621410", "621502", "621317", "621511", "621602",
        "621603", "621604", "621605", "621608", "621609", "621610",
        "621611", "621612", "621613", "621614", "621615", "621616",
        "621617", "621607", "621606", "621804", "621807", "621813",
        "621814", "621817", "621901", "621904", "621905", "621906",
        "621907", "621908", "621909", "621910", "621911", "621912",
        "621913", "621915", "622002", "621903", "622004", "622005",
        "622006", "622007", "622008", "622010", "622011", "622012",
        "621914", "622015", "622016", "622003", "622018", "622019",
        "622020", "622102", "622103", "622104", "622105", "622013",
        "622111", "622114", "622200", "622017", "622202", "622203",
        "622208", "622210", "622211", "622212", "622213", "622214",
        "622110", "622220", "622223", "622225", "622229", "622230",
        "622231", "622232", "622233", "622234", "622235", "622237",
        "622215", "622239", "622240", "622245", "622224", "622303",
        "622304", "622305", "622306", "622307", "622308", "622309",
        "622238", "622314", "622315", "622317", "622302", "622402",
        "622403", "622404", "622313", "622504", "622505", "622509",
        "622513", "622517", "622502", "622604", "622605", "622606",
        "622510", "622703", "622715", "622806", "622902", "622903",
        "622706", "623002", "623006", "623008", "623011", "623012",
        "622904", "623015", "623100", "623202", "623301", "623400",
        "623500", "623602", "623803", "623901", "623014", "624100",
        "624200", "624301", "624402", "62451804", "62451810", "62451811",
        "62458071", "623700", "628288", "624000", "628286", "622206",
        "621225", "526836", "513685", "543098", "458441", "620058",
        "621281", "622246", "900000", "544210", "548943", "370267",
        "621558", "621559", "621722", "621723", "620086", "621226",
        "402791", "427028", "427038", "548259", "356879", "356880",
        "356881", "356882", "528856", "621618", "620516", "621227",
        "621721", "900010", "625330", "625331", "625332", "623062",
        "622236", "621670", "524374", "550213", "374738", "374739",
        "621288", "625708", "625709", "622597", "622599", "360883",
        "360884", "625865", "625866", "625899", "621376", "620054",
        "620142", "621428", "625939", "621434", "625987", "621761",
        "621749", "620184", "621300", "621378", "625114", "622159",
        "621720", "625021", "625022", "621379", "620114", "620146",
        "621724", "625918", "621371", "620143", "620149", "621414",
        "625914", "621375", "620187", "621433", "625986", "621370",
        "625925", "622926", "622927", "622928", "622929", "622930",
        "622931", "620124", "620183", "620561", "625116", "622227",
        "621372", "621464", "625942", "622158", "625917", "621765",
        "620094", "620186", "621719", "621719", "621750", "621377",
        "620148", "620185", "621374", "621731", "621781", "552599",
        "623206", "621671", "620059", "403361", "404117", "404118",
        "404119", "404120", "404121", "463758", "514027", "519412",
        "519413", "520082", "520083", "558730", "621282", "621336",
        "621619", "622821", "622822", "622823", "622824", "622825",
        "622826", "622827", "622828", "622836", "622837", "622840",
        "622841", "622843", "622844", "622845", "622846", "622847",
        "622848", "622849", "623018", "625996", "625997", "625998",
        "628268", "625826", "625827", "548478", "544243", "622820",
        "622830", "622838", "625336", "628269", "620501", "621660",
        "621661", "621662", "621663", "621665", "621667", "621668",
        "621669", "621666", "625908", "625910", "625909", "356833",
        "356835", "409665", "409666", "409668", "409669", "409670",
        "409671", "409672", "456351", "512315", "512316", "512411",
        "512412", "514957", "409667", "518378", "518379", "518474",
        "518475", "518476", "438088", "524865", "525745", "525746",
        "547766", "552742", "553131", "558868", "514958", "622752",
        "622753", "622755", "524864", "622757", "622758", "622759",
        "622760", "622761", "622762", "622763", "601382", "622756",
        "628388", "621256", "621212", "620514", "622754", "622764",
        "518377", "622765", "622788", "621283", "620061", "621725",
        "620040", "558869", "621330", "621331", "621332", "621333",
        "621297", "377677", "621568", "621569", "625905", "625906",
        "625907", "628313", "625333", "628312", "623208", "621620",
        "621756", "621757", "621758", "621759", "621785", "621786",
        "621787", "621788", "621789", "621790", "621672", "625337",
        "625338", "625568", "621648", "621248", "621249", "622750",
        "622751", "622771", "622772", "622770", "625145", "620531",
        "620210", "620211", "622479", "622480", "622273", "622274",
        "621231", "621638", "621334", "625140", "621395", "622725",
        "622728", "621284", "421349", "434061", "434062", "436728",
        "436742", "453242", "491031", "524094", "526410", "544033",
        "552245", "589970", "620060", "621080", "621081", "621466",
        "621467", "621488", "621499", "621598", "621621", "621700",
        "622280", "622700", "622707", "622966", "622988", "625955",
        "625956", "553242", "621082", "621673", "623211", "356896",
        "356899", "356895", "436718", "436738", "436745", "436748",
        "489592", "531693", "532450", "532458", "544887", "552801",
        "557080", "558895", "559051", "622166", "622168", "622708",
        "625964", "625965", "625966", "628266", "628366", "625362",
        "625363", "628316", "628317", "620021", "620521", "405512",
        "601428", "405512", "434910", "458123", "458124", "520169",
        "522964", "552853", "601428", "622250", "622251", "521899",
        "622254", "622255", "622256", "622257", "622258", "622259",
        "622253", "622261", "622284", "622656", "628216", "622252",
        "66405512", "622260", "66601428", "955590", "955591", "955592",
        "955593", "628218", "622262", "621069", "620013", "625028",
        "625029", "621436", "621002", "621335", "433670", "433680",
        "442729", "442730", "620082", "622690", "622691", "622692",
        "622696", "622698", "622998", "622999", "433671", "968807",
        "968808", "968809", "621771", "621767", "621768", "621770",
        "621772", "621773", "620527", "356837", "356838", "486497",
        "622660", "622662", "622663", "622664", "622665", "622666",
        "622667", "622669", "622670", "622671", "622672", "622668",
        "622661", "622674", "622673", "620518", "621489", "621492",
        "620535", "623156", "621490", "621491", "620085", "623155",
        "623157", "623158", "623159", "999999", "621222", "623020",
        "623021", "623022", "623023", "622630", "622631", "622632",
        "622633", "622615", "622616", "622618", "622622", "622617",
        "622619", "415599", "421393", "421865", "427570", "427571",
        "472067", "472068", "622620", "621691", "545392", "545393",
        "545431", "545447", "356859", "356857", "407405", "421869",
        "421870", "421871", "512466", "356856", "528948", "552288",
        "622600", "622601", "622602", "517636", "622621", "628258",
        "556610", "622603", "464580", "464581", "523952", "545217",
        "553161", "356858", "622623", "625911", "377152", "377153",
        "377158", "377155", "625912", "625913", "356885", "356886",
        "356887", "356888", "356890", "402658", "410062", "439188",
        "439227", "468203", "479228", "479229", "512425", "521302",
        "524011", "356889", "545620", "545621", "545947", "545948",
        "552534", "552587", "622575", "622576", "622577", "622579",
        "622580", "545619", "622581", "622582", "622588", "622598",
        "622609", "690755", "690755", "545623", "621286", "620520",
        "621483", "621485", "621486", "628290", "622578", "370285",
        "370286", "370287", "370289", "439225", "518710", "518718",
        "628362", "439226", "628262", "625802", "625803", "621299",
        "966666", "622909", "622908", "438588", "438589", "461982",
        "486493", "486494", "486861", "523036", "451289", "527414",
        "528057", "622901", "622902", "622922", "628212", "451290",
        "524070", "625084", "625085", "625086", "625087", "548738",
        "549633", "552398", "625082", "625083", "625960", "625961",
        "625962", "625963", "356851", "356852", "404738", "404739",
        "456418", "498451", "515672", "356850", "517650", "525998",
        "622177", "622277", "622516", "622517", "622518", "622520",
        "622521", "622522", "622523", "628222", "628221", "984301",
        "984303", "622176", "622276", "622228", "621352", "621351",
        "621390", "621792", "625957", "625958", "621791", "620530",
        "625993", "622519", "621793", "621795", "621796", "622500",
        "623078", "622384", "940034", "940015", "622886", "622391",
        "940072", "622359", "940066", "622857", "940065", "621019",
        "622309", "621268", "622884", "621453", "622684", "621016",
        "621015", "622950", "622951", "621072", "623183", "623185",
        "621005", "622172", "622985", "622987", "622267", "622278",
        "622279", "622468", "622892", "940021", "621050", "620522",
        "356827", "356828", "356830", "402673", "402674", "438600",
        "486466", "519498", "520131", "524031", "548838", "622148",
        "622149", "622268", "356829", "622300", "628230", "622269",
        "625099", "625953", "625350", "625351", "625352", "519961",
        "625839", "421317", "602969", "621030", "621420", "621468",
        "623111", "422160", "422161", "622865", "940012", "623131",
        "622178", "622179", "628358", "622394", "940025", "621279",
        "622281", "622316", "940022", "621418", "512431", "520194",
        "621626", "623058", "602907", "622986", "622989", "622298",
        "622338", "940032", "623205", "621977", "990027", "622325",
        "623029", "623105", "621244", "623081", "623108", "566666",
        "622455", "940039", "622466", "628285", "622420", "940041",
        "623118", "603708", "622993", "623070", "623069", "623172",
        "623173", "622383", "622385", "628299", "603506", "603367",
        "622878", "623061", "623209", "628242", "622595", "622303",
        "622305", "621259", "622596", "622333", "940050", "621439",
        "623010", "621751", "628278", "625502", "625503", "625135",
        "622476", "621754", "622143", "940001", "623026", "623086",
        "628291", "621532", "621482", "622135", "622152", "622153",
        "622154", "622996", "622997", "940027", "623099", "623007",
        "940055", "622397", "622398", "940054", "622331", "622426",
        "625995", "621452", "628205", "628214", "625529", "622428",
        "621529", "622429", "621417", "623089", "623200", "940057",
        "622311", "623119", "622877", "622879", "621775", "623203",
        "603601", "622137", "622327", "622340", "622366", "622134",
        "940018", "623016", "623096", "940049", "622425", "622425",
        "621577", "622485", "623098", "628329", "621538", "940006",
        "621269", "622275", "621216", "622465", "940031", "621252",
        "622146", "940061", "621419", "623170", "622440", "940047",
        "940017", "622418", "623077", "622413", "940002", "623188",
        "622310", "940068", "622321", "625001", "622427", "940069",
        "623039", "628273", "622370", "683970", "940074", "621437",
        "628319", "990871", "622308", "621415", "623166", "622132",
        "621340", "621341", "622140", "623073", "622147", "621633",
        "622301", "623171", "621422", "622335", "622336", "622165",
        "622315", "628295", "625950", "621760", "622337", "622411",
        "623102", "622342", "623048", "622367", "622392", "623085",
        "622395", "622441", "622448", "621413", "622856", "621037",
        "621097", "621588", "623032", "622644", "623518", "622870",
        "622866", "623072", "622897", "628279", "622864", "621403",
        "622561", "622562", "622563", "622167", "622777", "621497",
        "622868", "622899", "628255", "625988", "622566", "622567",
        "622625", "622626", "625946", "628200", "621076", "504923",
        "622173", "622422", "622447", "622131", "940076", "621579",
        "622876", "622873", "622962", "622936", "623060", "622937",
        "623101", "621460", "622939", "622960", "623523", "621591",
        "622961", "628210", "622283", "625902", "621010", "622980",
        "623135", "621726", "621088", "620517", "622740", "625036",
        "621014", "621004", "622972", "623196", "621028", "623083",
        "628250", "623121", "621070", "628253", "622979", "621035",
        "621038", "621086", "621498", "621296", "621448", "622945",
        "621755", "622940", "623120", "628355", "621089", "623161",
        "628339", "621074", "621515", "623030", "621345", "621090",
        "623178", "621091", "623168", "621057", "623199", "621075",
        "623037", "628303", "621233", "621235", "621223", "621780",
        "621221", "623138", "628389", "621239", "623068", "621271",
        "628315", "621272", "621738", "621273", "623079", "621263",
        "621325", "623084", "621327", "621753", "628331", "623160",
        "621366", "621388", "621348", "621359", "621360", "621217",
        "622959", "621270", "622396", "622511", "623076", "621391",
        "621339", "621469", "621625", "623688", "623113", "621601",
        "621655", "621636", "623182", "623087", "621696", "622955",
        "622478", "940013", "621495", "621688", "623162", "622462",
        "628272", "625101", "622323", "623071", "603694", "622128",
        "622129", "623035", "623186", "621522", "622271", "940037",
        "940038", "985262", "622322", "628381", "622481", "622341",
        "940058", "623115", "621258", "621465", "621528", "622328",
        "940062", "625288", "623038", "625888", "622332", "940063",
        "623123", "622138", "621066", "621560", "621068", "620088",
        "621067", "622531", "622329", "623103", "622339", "620500",
        "621024", "622289", "622389", "628300", "625516", "621516",
        "622859", "622869", "623075", "622895", "623125", "622947",
        "621561", "623095", "621073", "623109", "621361", "623033",
        "623207", "622891", "621363", "623189", "623510", "622995",
        "621053", "621230", "621229", "622218", "628267", "621392",
        "621481", "621310", "621396", "623251", "628351" };
    // "发卡行.卡种名称",
    private static final String[] BANKNAME = { "邮储银行·绿卡通", "邮储银行·绿卡银联标准卡",
        "邮储银行·绿卡银联标准卡", "邮储银行·绿卡专用卡", "邮储银行·绿卡银联标准卡", "邮储银行·绿卡(银联卡)",
        "邮储银行·绿卡VIP卡", "邮储银行·银联标准卡", "邮储银行·中职学生资助卡", "邮政储蓄银行·IC绿卡通VIP卡",
        "邮政储蓄银行·IC绿卡通", "邮政储蓄银行·IC联名卡", "邮政储蓄银行·IC预付费卡", "邮储银行·绿卡银联标准卡",
        "邮储银行·绿卡通", "邮政储蓄银行·武警军人保障卡", "邮政储蓄银行·中国旅游卡(金卡)",
        "邮政储蓄银行·普通高中学生资助卡", "邮政储蓄银行·中国旅游卡(普卡)", "邮政储蓄银行·福农卡",
        "工商银行·牡丹运通卡金卡", "工商银行·牡丹运通卡金卡", "工商银行·牡丹运通卡金卡",
        "工商银行·牡丹VISA卡(单位卡)", "工商银行·牡丹VISA信用卡", "工商银行·牡丹VISA卡(单位卡)",
        "工商银行·牡丹VISA信用卡", "工商银行·牡丹VISA信用卡", "工商银行·牡丹VISA信用卡",
        "工商银行·牡丹VISA信用卡", "工商银行·牡丹运通卡普通卡", "工商银行·牡丹VISA信用卡",
        "工商银行·牡丹VISA白金卡", "工商银行·牡丹贷记卡(银联卡)", "工商银行·牡丹贷记卡(银联卡)",
        "工商银行·牡丹贷记卡(银联卡)", "工商银行·牡丹贷记卡(银联卡)", "工商银行·牡丹欧元卡", "工商银行·牡丹欧元卡",
        "工商银行·牡丹欧元卡", "工商银行·牡丹万事达国际借记卡", "工商银行·牡丹VISA信用卡", "工商银行·海航信用卡",
        "工商银行·牡丹VISA信用卡", "工商银行·牡丹万事达信用卡", "工商银行·牡丹万事达信用卡",
        "工商银行·牡丹万事达信用卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹万事达白金卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·海航信用卡个人普卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·灵通卡", "工商银行·牡丹灵通卡", "工商银行·E时代卡", "工商银行·E时代卡",
        "工商银行·理财金卡", "工商银行·准贷记卡(个普)", "工商银行·准贷记卡(个普)", "工商银行·准贷记卡(个普)",
        "工商银行·准贷记卡(个普)", "工商银行·准贷记卡(个普)", "工商银行·牡丹灵通卡", "工商银行·准贷记卡(商普)",
        "工商银行·牡丹卡(商务卡)", "工商银行·准贷记卡(商金)", "工商银行·牡丹卡(商务卡)", "工商银行·贷记卡(个普)",
        "工商银行·牡丹卡(个人卡)", "工商银行·牡丹卡(个人卡)", "工商银行·牡丹卡(个人卡)", "工商银行·牡丹卡(个人卡)",
        "工商银行·贷记卡(个金)", "工商银行·牡丹交通卡", "工商银行·准贷记卡(个金)", "工商银行·牡丹交通卡",
        "工商银行·贷记卡(商普)", "工商银行·贷记卡(商金)", "工商银行·牡丹卡(商务卡)", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹交通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡",
        "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹灵通卡", "工商银行·牡丹贷记卡",
        "工商银行·牡丹贷记卡", "工商银行·牡丹贷记卡", "工商银行·牡丹贷记卡", "工商银行·牡丹灵通卡",
        "工商银行·中央预算单位公务卡", "工商银行·牡丹灵通卡", "工商银行·财政预算单位公务卡", "工商银行·牡丹卡白金卡",
        "工商银行·牡丹卡普卡", "工商银行·国航知音牡丹信用卡", "工商银行·国航知音牡丹信用卡", "工商银行·国航知音牡丹信用卡",
        "工商银行·国航知音牡丹信用卡", "工商银行·银联标准卡", "工商银行·中职学生资助卡", "工商银行·专用信用消费卡",
        "工商银行·牡丹社会保障卡", "中国工商银行·牡丹东航联名卡", "中国工商银行·牡丹东航联名卡",
        "中国工商银行·牡丹运通白金卡", "中国工商银行·福农灵通卡", "中国工商银行·福农灵通卡", "工商银行·灵通卡",
        "工商银行·灵通卡", "中国工商银行·中国旅行卡", "工商银行·牡丹卡普卡", "工商银行·国际借记卡",
        "工商银行·国际借记卡", "工商银行·国际借记卡", "工商银行·国际借记卡", "中国工商银行·牡丹JCB信用卡",
        "中国工商银行·牡丹JCB信用卡", "中国工商银行·牡丹JCB信用卡", "中国工商银行·牡丹JCB信用卡",
        "中国工商银行·牡丹多币种卡", "中国工商银行·武警军人保障卡", "工商银行·预付芯片卡", "工商银行·理财金账户金卡",
        "工商银行·灵通卡", "工商银行·牡丹宁波市民卡", "中国工商银行·中国旅游卡", "中国工商银行·中国旅游卡",
        "中国工商银行·中国旅游卡", "中国工商银行·借记卡", "中国工商银行·借贷合一卡", "中国工商银行·普通高中学生资助卡",
        "中国工商银行·牡丹多币种卡", "中国工商银行·牡丹多币种卡", "中国工商银行·牡丹百夫长信用卡",
        "中国工商银行·牡丹百夫长信用卡", "工商银行·工银财富卡", "中国工商银行·中小商户采购卡",
        "中国工商银行·中小商户采购卡", "中国工商银行·环球旅行金卡", "中国工商银行·环球旅行白金卡",
        "中国工商银行·牡丹工银大来卡", "中国工商银行·牡丹工银大莱卡", "中国工商银行·IC金卡", "中国工商银行·IC白金卡",
        "中国工商银行·工行IC卡(红卡)", "中国工商银行布鲁塞尔分行·借记卡", "中国工商银行布鲁塞尔分行·预付卡",
        "中国工商银行布鲁塞尔分行·预付卡", "中国工商银行金边分行·借记卡", "中国工商银行金边分行·信用卡",
        "中国工商银行金边分行·借记卡", "中国工商银行金边分行·信用卡", "中国工商银行加拿大分行·借记卡",
        "中国工商银行加拿大分行·借记卡", "中国工商银行加拿大分行·预付卡", "中国工商银行巴黎分行·借记卡",
        "中国工商银行巴黎分行·借记卡", "中国工商银行巴黎分行·贷记卡", "中国工商银行法兰克福分行·贷记卡",
        "中国工商银行法兰克福分行·借记卡", "中国工商银行法兰克福分行·贷记卡", "中国工商银行法兰克福分行·贷记卡",
        "中国工商银行法兰克福分行·借记卡", "中国工商银行法兰克福分行·预付卡", "中国工商银行法兰克福分行·预付卡",
        "中国工商银行印尼分行·借记卡", "中国工商银行印尼分行·信用卡", "中国工商银行米兰分行·借记卡",
        "中国工商银行米兰分行·预付卡", "中国工商银行米兰分行·预付卡", "中国工商银行阿拉木图子行·借记卡",
        "中国工商银行阿拉木图子行·贷记卡", "中国工商银行阿拉木图子行·借记卡", "中国工商银行阿拉木图子行·预付卡",
        "中国工商银行万象分行·借记卡", "中国工商银行万象分行·贷记卡", "中国工商银行卢森堡分行·借记卡",
        "中国工商银行卢森堡分行·贷记卡", "中国工商银行澳门分行·E时代卡", "中国工商银行澳门分行·E时代卡",
        "中国工商银行澳门分行·E时代卡", "中国工商银行澳门分行·理财金账户", "中国工商银行澳门分行·理财金账户",
        "中国工商银行澳门分行·理财金账户", "中国工商银行澳门分行·预付卡", "中国工商银行澳门分行·预付卡",
        "中国工商银行澳门分行·工银闪付预付卡", "中国工商银行澳门分行·工银银联公司卡", "中国工商银行澳门分行·Diamond",
        "中国工商银行阿姆斯特丹·借记卡", "中国工商银行卡拉奇分行·借记卡", "中国工商银行卡拉奇分行·贷记卡",
        "中国工商银行新加坡分行·贷记卡", "中国工商银行新加坡分行·贷记卡", "中国工商银行新加坡分行·借记卡",
        "中国工商银行新加坡分行·预付卡", "中国工商银行新加坡分行·预付卡", "中国工商银行新加坡分行·借记卡",
        "中国工商银行新加坡分行·借记卡", "中国工商银行马德里分行·借记卡", "中国工商银行马德里分行·借记卡",
        "中国工商银行马德里分行·预付卡", "中国工商银行马德里分行·预付卡", "中国工商银行伦敦子行·借记卡",
        "中国工商银行伦敦子行·工银伦敦借记卡", "中国工商银行伦敦子行·借记卡", "农业银行·金穗贷记卡", "农业银行·中国旅游卡",
        "农业银行·普通高中学生资助卡", "农业银行·银联标准卡", "农业银行·金穗贷记卡(银联卡)",
        "农业银行·金穗贷记卡(银联卡)", "农业银行·金穗贷记卡(银联卡)", "农业银行·金穗贷记卡(银联卡)",
        "农业银行·金穗贷记卡(银联卡)", "农业银行·金穗贷记卡(银联卡)", "农业银行·VISA白金卡",
        "农业银行·万事达白金卡", "农业银行·金穗贷记卡(银联卡)", "农业银行·金穗贷记卡(银联卡)",
        "农业银行·金穗贷记卡(银联卡)", "农业银行·金穗贷记卡(银联卡)", "农业银行·金穗贷记卡", "农业银行·中职学生资助卡",
        "农业银行·专用惠农卡", "农业银行·武警军人保障卡", "农业银行·金穗校园卡(银联卡)", "农业银行·金穗星座卡(银联卡)",
        "农业银行·金穗社保卡(银联卡)", "农业银行·金穗旅游卡(银联卡)", "农业银行·金穗青年卡(银联卡)",
        "农业银行·复合介质金穗通宝卡", "农业银行·金穗海通卡", "农业银行·退役金卡", "农业银行·金穗贷记卡",
        "农业银行·金穗贷记卡", "农业银行·金穗通宝卡(银联卡)", "农业银行·金穗惠农卡", "农业银行·金穗通宝银卡",
        "农业银行·金穗通宝卡(银联卡)", "农业银行·金穗通宝卡(银联卡)", "农业银行·金穗通宝卡",
        "农业银行·金穗通宝卡(银联卡)", "农业银行·金穗通宝卡(银联卡)", "农业银行·金穗通宝钻石卡", "农业银行·掌尚钱包",
        "农业银行·银联IC卡金卡", "农业银行·银联预算单位公务卡金卡", "农业银行·银联IC卡白金卡", "农业银行·金穗公务卡",
        "中国农业银行贷记卡·IC普卡", "中国农业银行贷记卡·IC金卡", "中国农业银行贷记卡·澳元卡",
        "中国农业银行贷记卡·欧元卡", "中国农业银行贷记卡·金穗通商卡", "中国农业银行贷记卡·金穗通商卡",
        "中国农业银行贷记卡·银联白金卡", "中国农业银行贷记卡·中国旅游卡", "中国农业银行贷记卡·银联IC公务卡",
        "宁波市农业银行·市民卡B卡", "中国银行·联名卡", "中国银行·个人普卡", "中国银行·个人金卡", "中国银行·员工普卡",
        "中国银行·员工金卡", "中国银行·理财普卡", "中国银行·理财金卡", "中国银行·理财银卡", "中国银行·理财白金卡",
        "中国银行·中行金融IC卡白金卡", "中国银行·中行金融IC卡普卡", "中国银行·中行金融IC卡金卡",
        "中国银行·中银JCB卡金卡", "中国银行·中银JCB卡普卡", "中国银行·员工普卡", "中国银行·个人普卡",
        "中国银行·中银威士信用卡员", "中国银行·中银威士信用卡员", "中国银行·个人白金卡", "中国银行·中银威士信用卡",
        "中国银行·长城公务卡", "中国银行·长城电子借记卡", "中国银行·中银万事达信用卡", "中国银行·中银万事达信用卡",
        "中国银行·中银万事达信用卡", "中国银行·中银万事达信用卡", "中国银行·中银万事达信用卡", "中国银行·中银威士信用卡员",
        "中国银行·长城万事达信用卡", "中国银行·长城万事达信用卡", "中国银行·长城万事达信用卡", "中国银行·长城万事达信用卡",
        "中国银行·长城万事达信用卡", "中国银行·中银奥运信用卡", "中国银行·长城信用卡", "中国银行·长城信用卡",
        "中国银行·长城信用卡", "中国银行·长城万事达信用卡", "中国银行·长城公务卡", "中国银行·长城公务卡",
        "中国银行·中银万事达信用卡", "中国银行·中银万事达信用卡", "中国银行·长城人民币信用卡", "中国银行·长城人民币信用卡",
        "中国银行·长城人民币信用卡", "中国银行·长城信用卡", "中国银行·长城人民币信用卡", "中国银行·长城人民币信用卡",
        "中国银行·长城信用卡", "中国银行·银联单币贷记卡", "中国银行·长城信用卡", "中国银行·长城信用卡",
        "中国银行·长城信用卡", "中国银行·长城电子借记卡", "中国银行·长城人民币信用卡", "中国银行·银联标准公务卡",
        "中国银行·一卡双账户普卡", "中国银行·财互通卡", "中国银行·电子现金卡", "中国银行·长城人民币信用卡",
        "中国银行·长城单位信用卡普卡", "中国银行·中银女性主题信用卡", "中国银行·长城单位信用卡金卡", "中国银行·白金卡",
        "中国银行·中职学生资助卡", "中国银行·银联标准卡", "中国银行·金融IC卡", "中国银行·长城社会保障卡",
        "中国银行·世界卡", "中国银行·社保联名卡", "中国银行·社保联名卡", "中国银行·医保联名卡", "中国银行·医保联名卡",
        "中国银行·公司借记卡", "中国银行·银联美运顶级卡", "中国银行·长城福农借记卡金卡", "中国银行·长城福农借记卡普卡",
        "中国银行·中行金融IC卡普卡", "中国银行·中行金融IC卡金卡", "中国银行·中行金融IC卡白金卡",
        "中国银行·长城银联公务IC卡白金卡", "中国银行·中银旅游信用卡", "中国银行·长城银联公务IC卡金卡",
        "中国银行·中国旅游卡", "中国银行·武警军人保障卡", "中国银行·社保联名借记IC卡", "中国银行·社保联名借记IC卡",
        "中国银行·医保联名借记IC卡", "中国银行·医保联名借记IC卡", "中国银行·借记IC个人普卡",
        "中国银行·借记IC个人金卡", "中国银行·借记IC个人普卡", "中国银行·借记IC白金卡", "中国银行·借记IC钻石卡",
        "中国银行·借记IC联名卡", "中国银行·普通高中学生资助卡", "中国银行·长城环球通港澳台旅游金卡",
        "中国银行·长城环球通港澳台旅游白金卡", "中国银行·中银福农信用卡", "中国银行金边分行·借记卡",
        "中国银行雅加达分行·借记卡", "中国银行首尔分行·借记卡", "中国银行澳门分行·人民币信用卡",
        "中国银行澳门分行·人民币信用卡", "中国银行澳门分行·中银卡", "中国银行澳门分行·中银卡", "中国银行澳门分行·中银卡",
        "中国银行澳门分行·中银银联双币商务卡", "中国银行澳门分行·预付卡", "中国银行澳门分行·澳门中国银行银联预付卡",
        "中国银行澳门分行·澳门中国银行银联预付卡", "中国银行澳门分行·熊猫卡", "中国银行澳门分行·财富卡",
        "中国银行澳门分行·银联港币卡", "中国银行澳门分行·银联澳门币卡", "中国银行马尼拉分行·双币种借记卡",
        "中国银行胡志明分行·借记卡", "中国银行曼谷分行·借记卡", "中国银行曼谷分行·长城信用卡环球通",
        "中国银行曼谷分行·借记卡", "建设银行·龙卡准贷记卡", "建设银行·龙卡准贷记卡金卡", "建设银行·中职学生资助卡",
        "建设银行·乐当家银卡VISA", "建设银行·乐当家金卡VISA", "建设银行·乐当家白金卡",
        "建设银行·龙卡普通卡VISA", "建设银行·龙卡储蓄卡", "建设银行·VISA准贷记卡(银联卡)",
        "建设银行·VISA准贷记金卡", "建设银行·乐当家", "建设银行·乐当家", "建设银行·准贷记金卡",
        "建设银行·乐当家白金卡", "建设银行·金融复合IC卡", "建设银行·银联标准卡", "建设银行·银联理财钻石卡",
        "建设银行·金融IC卡", "建设银行·理财白金卡", "建设银行·社保IC卡", "建设银行·财富卡私人银行卡",
        "建设银行·理财金卡", "建设银行·福农卡", "建设银行·武警军人保障卡", "建设银行·龙卡通", "建设银行·银联储蓄卡",
        "建设银行·龙卡储蓄卡(银联卡)", "建设银行·准贷记卡", "建设银行·理财白金卡", "建设银行·理财金卡",
        "建设银行·准贷记卡普卡", "建设银行·准贷记卡金卡", "建设银行·龙卡信用卡", "建设银行·建行陆港通龙卡",
        "中国建设银行·普通高中学生资助卡", "中国建设银行·中国旅游卡", "中国建设银行·龙卡JCB金卡",
        "中国建设银行·龙卡JCB白金卡", "中国建设银行·龙卡JCB普卡", "中国建设银行·龙卡贷记卡公司卡",
        "中国建设银行·龙卡贷记卡", "中国建设银行·龙卡国际普通卡VISA", "中国建设银行·龙卡国际金卡VISA",
        "中国建设银行·VISA白金信用卡", "中国建设银行·龙卡国际白金卡", "中国建设银行·龙卡国际普通卡MASTER",
        "中国建设银行·龙卡国际金卡MASTER", "中国建设银行·龙卡万事达金卡", "中国建设银行·龙卡贷记卡",
        "中国建设银行·龙卡万事达白金卡", "中国建设银行·龙卡贷记卡", "中国建设银行·龙卡万事达信用卡",
        "中国建设银行·龙卡人民币信用卡", "中国建设银行·龙卡人民币信用金卡", "中国建设银行·龙卡人民币白金卡",
        "中国建设银行·龙卡IC信用卡普卡", "中国建设银行·龙卡IC信用卡金卡", "中国建设银行·龙卡IC信用卡白金卡",
        "中国建设银行·龙卡银联公务卡普卡", "中国建设银行·龙卡银联公务卡金卡", "中国建设银行·中国旅游卡",
        "中国建设银行·中国旅游卡", "中国建设银行·龙卡IC公务卡", "中国建设银行·龙卡IC公务卡", "交通银行·交行预付卡",
        "交通银行·世博预付IC卡", "交通银行·太平洋互连卡", "交通银行·太平洋万事顺卡", "交通银行·太平洋互连卡(银联卡)",
        "交通银行·太平洋白金信用卡", "交通银行·太平洋双币贷记卡", "交通银行·太平洋双币贷记卡", "交通银行·太平洋双币贷记卡",
        "交通银行·太平洋白金信用卡", "交通银行·太平洋双币贷记卡", "交通银行·太平洋万事顺卡", "交通银行·太平洋人民币贷记卡",
        "交通银行·太平洋人民币贷记卡", "交通银行·太平洋双币贷记卡", "交通银行·太平洋准贷记卡", "交通银行·太平洋准贷记卡",
        "交通银行·太平洋准贷记卡", "交通银行·太平洋准贷记卡", "交通银行·太平洋借记卡", "交通银行·太平洋借记卡",
        "交通银行·太平洋人民币贷记卡", "交通银行·太平洋借记卡", "交通银行·太平洋MORE卡", "交通银行·白金卡",
        "交通银行·交通银行公务卡普卡", "交通银行·太平洋人民币贷记卡", "交通银行·太平洋互连卡", "交通银行·太平洋借记卡",
        "交通银行·太平洋万事顺卡", "交通银行·太平洋贷记卡(银联卡)", "交通银行·太平洋贷记卡(银联卡)",
        "交通银行·太平洋贷记卡(银联卡)", "交通银行·太平洋贷记卡(银联卡)", "交通银行·交通银行公务卡金卡",
        "交通银行·交银IC卡", "交通银行香港分行·交通银行港币借记卡", "交通银行香港分行·港币礼物卡",
        "交通银行香港分行·双币种信用卡", "交通银行香港分行·双币种信用卡", "交通银行香港分行·双币卡",
        "交通银行香港分行·银联人民币卡", "交通银行澳门分行·银联借记卡", "中信银行·中信借记卡", "中信银行·中信借记卡",
        "中信银行·中信国际借记卡", "中信银行·中信国际借记卡", "中信银行·中国旅行卡", "中信银行·中信借记卡(银联卡)",
        "中信银行·中信借记卡(银联卡)", "中信银行·中信贵宾卡(银联卡)", "中信银行·中信理财宝金卡",
        "中信银行·中信理财宝白金卡", "中信银行·中信钻石卡", "中信银行·中信钻石卡", "中信银行·中信借记卡",
        "中信银行·中信理财宝(银联卡)", "中信银行·中信理财宝(银联卡)", "中信银行·中信理财宝(银联卡)",
        "中信银行·借记卡", "中信银行·理财宝IC卡", "中信银行·理财宝IC卡", "中信银行·理财宝IC卡",
        "中信银行·理财宝IC卡", "中信银行·理财宝IC卡", "中信银行·主账户复合电子现金卡", "光大银行·阳光商旅信用卡",
        "光大银行·阳光商旅信用卡", "光大银行·阳光商旅信用卡", "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)",
        "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)",
        "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)",
        "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)", "光大银行·阳光卡(银联卡)",
        "光大银行·阳光卡(银联卡)", "光大银行·借记卡普卡", "光大银行·社会保障IC卡", "光大银行·IC借记卡普卡",
        "光大银行·手机支付卡", "光大银行·联名IC卡普卡", "光大银行·借记IC卡白金卡", "光大银行·借记IC卡金卡",
        "光大银行·阳光旅行卡", "光大银行·借记IC卡钻石卡", "光大银行·联名IC卡金卡", "光大银行·联名IC卡白金卡",
        "光大银行·联名IC卡钻石卡", "华夏银行·华夏卡(银联卡)", "华夏银行·华夏白金卡", "华夏银行·华夏普卡",
        "华夏银行·华夏金卡", "华夏银行·华夏白金卡", "华夏银行·华夏钻石卡", "华夏银行·华夏卡(银联卡)",
        "华夏银行·华夏至尊金卡(银联卡)", "华夏银行·华夏丽人卡(银联卡)", "华夏银行·华夏万通卡",
        "民生银行·民生借记卡(银联卡)", "民生银行·民生银联借记卡-金卡", "民生银行·钻石卡",
        "民生银行·民生借记卡(银联卡)", "民生银行·民生借记卡(银联卡)", "民生银行·民生借记卡(银联卡)",
        "民生银行·民生借记卡", "民生银行·民生国际卡", "民生银行·民生国际卡(银卡)", "民生银行·民生国际卡(欧元卡)",
        "民生银行·民生国际卡(澳元卡)", "民生银行·民生国际卡", "民生银行·民生国际卡", "民生银行·薪资理财卡",
        "民生银行·借记卡普卡", "民生银行·民生MasterCard", "民生银行·民生MasterCard",
        "民生银行·民生MasterCard", "民生银行·民生MasterCard", "民生银行·民生JCB信用卡",
        "民生银行·民生JCB金卡", "民生银行·民生贷记卡(银联卡)", "民生银行·民生贷记卡(银联卡)",
        "民生银行·民生贷记卡(银联卡)", "民生银行·民生贷记卡(银联卡)", "民生银行·民生贷记卡(银联卡)",
        "民生银行·民生JCB普卡", "民生银行·民生贷记卡(银联卡)", "民生银行·民生贷记卡(银联卡)",
        "民生银行·民生信用卡(银联卡)", "民生银行·民生信用卡(银联卡)", "民生银行·民生银联白金信用卡",
        "民生银行·民生贷记卡(银联卡)", "民生银行·民生银联个人白金卡", "民生银行·公务卡金卡",
        "民生银行·民生贷记卡(银联卡)", "民生银行·民生银联商务信用卡", "民生银行·民VISA无限卡",
        "民生银行·民生VISA商务白金卡", "民生银行·民生万事达钛金卡", "民生银行·民生万事达世界卡",
        "民生银行·民生万事达白金公务卡", "民生银行·民生JCB白金卡", "民生银行·银联标准金卡", "民生银行·银联芯片普卡",
        "民生银行·民生运通双币信用卡普卡", "民生银行·民生运通双币信用卡金卡", "民生银行·民生运通双币信用卡钻石卡",
        "民生银行·民生运通双币标准信用卡白金卡", "民生银行·银联芯片金卡", "民生银行·银联芯片白金卡",
        "招商银行·招商银行信用卡", "招商银行·招商银行信用卡", "招商银行·招商银行信用卡", "招商银行·招商银行信用卡",
        "招商银行·招商银行信用卡", "招商银行·两地一卡通", "招商银行·招行国际卡(银联卡)", "招商银行·招商银行信用卡",
        "招商银行·VISA商务信用卡", "招商银行·招行国际卡(银联卡)", "招商银行·招商银行信用卡",
        "招商银行·招商银行信用卡", "招商银行·招行国际卡(银联卡)", "招商银行·世纪金花联名信用卡",
        "招商银行·招行国际卡(银联卡)", "招商银行·招商银行信用卡", "招商银行·万事达信用卡", "招商银行·万事达信用卡",
        "招商银行·万事达信用卡", "招商银行·万事达信用卡", "招商银行·招商银行信用卡", "招商银行·招商银行信用卡",
        "招商银行·招商银行信用卡", "招商银行·招商银行信用卡", "招商银行·招商银行信用卡", "招商银行·招商银行信用卡",
        "招商银行·一卡通(银联卡)", "招商银行·万事达信用卡", "招商银行·招商银行信用卡", "招商银行·招商银行信用卡",
        "招商银行·一卡通(银联卡)", "招商银行·公司卡(银联卡)", "招商银行·金卡", "招商银行·招行一卡通",
        "招商银行·招行一卡通", "招商银行·万事达信用卡", "招商银行·金葵花卡", "招商银行·电子现金卡",
        "招商银行·银联IC普卡", "招商银行·银联IC金卡", "招商银行·银联金葵花IC卡", "招商银行·IC公务卡",
        "招商银行·招商银行信用卡", "招商银行信用卡中心·美国运通绿卡", "招商银行信用卡中心·美国运通金卡",
        "招商银行信用卡中心·美国运通商务绿卡", "招商银行信用卡中心·美国运通商务金卡", "招商银行信用卡中心·VISA信用卡",
        "招商银行信用卡中心·MASTER信用卡", "招商银行信用卡中心·MASTER信用金卡",
        "招商银行信用卡中心·银联标准公务卡(金卡)", "招商银行信用卡中心·VISA信用卡",
        "招商银行信用卡中心·银联标准财政公务卡", "招商银行信用卡中心·芯片IC信用卡", "招商银行信用卡中心·芯片IC信用卡",
        "招商银行香港分行·香港一卡通", "兴业银行·兴业卡(银联卡)", "兴业银行·兴业卡(银联标准卡)",
        "兴业银行·兴业自然人生理财卡", "兴业银行·兴业智能卡(银联卡)", "兴业银行·兴业智能卡",
        "兴业银行·visa标准双币个人普卡", "兴业银行·VISA商务普卡", "兴业银行·VISA商务金卡",
        "兴业银行·VISA运动白金信用卡", "兴业银行·万事达信用卡(银联卡)", "兴业银行·VISA信用卡(银联卡)",
        "兴业银行·加菲猫信用卡", "兴业银行·个人白金卡", "兴业银行·银联信用卡(银联卡)", "兴业银行·银联信用卡(银联卡)",
        "兴业银行·银联白金信用卡", "兴业银行·银联标准公务卡", "兴业银行·VISA信用卡(银联卡)",
        "兴业银行·万事达信用卡(银联卡)", "兴业银行·银联标准贷记普卡", "兴业银行·银联标准贷记金卡",
        "兴业银行·银联标准贷记金卡", "兴业银行·银联标准贷记金卡", "兴业银行·兴业信用卡", "兴业银行·兴业信用卡",
        "兴业银行·兴业信用卡", "兴业银行·银联标准贷记普卡", "兴业银行·银联标准贷记普卡", "兴业银行·兴业芯片普卡",
        "兴业银行·兴业芯片金卡", "兴业银行·兴业芯片白金卡", "兴业银行·兴业芯片钻石卡", "浦东发展银行·浦发JCB金卡",
        "浦东发展银行·浦发JCB白金卡", "浦东发展银行·信用卡VISA普通", "浦东发展银行·信用卡VISA金卡",
        "浦东发展银行·浦发银行VISA年青卡", "浦东发展银行·VISA白金信用卡", "浦东发展银行·浦发万事达白金卡",
        "浦东发展银行·浦发JCB普卡", "浦东发展银行·浦发万事达金卡", "浦东发展银行·浦发万事达普卡",
        "浦东发展银行·浦发单币卡", "浦东发展银行·浦发银联单币麦兜普卡", "浦东发展银行·东方轻松理财卡",
        "浦东发展银行·东方-轻松理财卡普卡", "浦东发展银行·东方轻松理财卡", "浦东发展银行·东方轻松理财智业金卡",
        "浦东发展银行·东方卡(银联卡)", "浦东发展银行·东方卡(银联卡)", "浦东发展银行·东方卡(银联卡)",
        "浦东发展银行·公务卡金卡", "浦东发展银行·公务卡普卡", "浦东发展银行·东方卡", "浦东发展银行·东方卡",
        "浦东发展银行·浦发单币卡", "浦东发展银行·浦发联名信用卡", "浦东发展银行·浦发银联白金卡",
        "浦东发展银行·轻松理财普卡", "浦东发展银行·移动联名卡", "浦东发展银行·轻松理财消贷易卡",
        "浦东发展银行·轻松理财普卡(复合卡)", "浦东发展银行·贷记卡", "浦东发展银行·贷记卡",
        "浦东发展银行·东方借记卡(复合卡)", "浦东发展银行·电子现金卡(IC卡)", "浦东发展银行·移动浦发联名卡",
        "浦东发展银行·东方-标准准贷记卡", "浦东发展银行·轻松理财金卡(复合卡)", "浦东发展银行·轻松理财白金卡(复合卡)",
        "浦东发展银行·轻松理财钻石卡(复合卡)", "浦东发展银行·东方卡", "恒丰银行·九州IC卡",
        "恒丰银行·九州借记卡(银联卡)", "恒丰银行·九州借记卡(银联卡)", "天津市商业银行·银联卡(银联卡)",
        "烟台商业银行·金通卡", "潍坊银行·鸢都卡(银联卡)", "潍坊银行·鸳都卡(银联卡)", "临沂商业银行·沂蒙卡(银联卡)",
        "临沂商业银行·沂蒙卡(银联卡)", "日照市商业银行·黄海卡", "日照市商业银行·黄海卡(银联卡)", "浙商银行·商卡",
        "浙商银行·商卡", "渤海银行·浩瀚金卡", "渤海银行·渤海银行借记卡", "渤海银行·金融IC卡",
        "渤海银行·渤海银行公司借记卡", "星展银行·星展银行借记卡", "星展银行·星展银行借记卡", "恒生银行·恒生通财卡",
        "恒生银行·恒生优越通财卡", "新韩银行·新韩卡", "上海银行·慧通钻石卡", "上海银行·慧通金卡",
        "上海银行·私人银行卡", "上海银行·综合保险卡", "上海银行·申卡社保副卡(有折)", "上海银行·申卡社保副卡(无折)",
        "上海银行·白金IC借记卡", "上海银行·慧通白金卡(配折)", "上海银行·慧通白金卡(不配折)",
        "上海银行·申卡(银联卡)", "上海银行·申卡借记卡", "上海银行·银联申卡(银联卡)", "上海银行·单位借记卡",
        "上海银行·首发纪念版IC卡", "上海银行·申卡贷记卡", "上海银行·申卡贷记卡", "上海银行·J分期付款信用卡",
        "上海银行·申卡贷记卡", "上海银行·申卡贷记卡", "上海银行·上海申卡IC", "上海银行·申卡贷记卡",
        "上海银行·申卡贷记卡普通卡", "上海银行·申卡贷记卡金卡", "上海银行·万事达白金卡", "上海银行·万事达星运卡",
        "上海银行·申卡贷记卡金卡", "上海银行·申卡贷记卡普通卡", "上海银行·安融卡", "上海银行·分期付款信用卡",
        "上海银行·信用卡", "上海银行·个人公务卡", "上海银行·安融卡", "上海银行·上海银行银联白金卡",
        "上海银行·贷记IC卡", "上海银行·中国旅游卡(IC普卡)", "上海银行·中国旅游卡(IC金卡)",
        "上海银行·中国旅游卡(IC白金卡)", "上海银行·万事达钻石卡", "上海银行·淘宝IC普卡", "北京银行·京卡借记卡",
        "北京银行·京卡(银联卡)", "北京银行·京卡借记卡", "北京银行·京卡", "北京银行·京卡", "北京银行·借记IC卡",
        "北京银行·京卡贵宾金卡", "北京银行·京卡贵宾白金卡", "吉林银行·君子兰一卡通(银联卡)",
        "吉林银行·君子兰卡(银联卡)", "吉林银行·长白山金融IC卡", "吉林银行·信用卡", "吉林银行·信用卡",
        "吉林银行·公务卡", "镇江市商业银行·金山灵通卡(银联卡)", "镇江市商业银行·金山灵通卡(银联卡)",
        "宁波银行·银联标准卡", "宁波银行·汇通借记卡", "宁波银行·汇通卡(银联卡)", "宁波银行·明州卡",
        "宁波银行·汇通借记卡", "宁波银行·汇通国际卡银联双币卡", "宁波银行·汇通国际卡银联双币卡", "平安银行·新磁条借记卡",
        "平安银行·平安银行IC借记卡", "平安银行·万事顺卡", "平安银行·平安银行借记卡", "平安银行·平安银行借记卡",
        "平安银行·万事顺借记卡", "焦作市商业银行·月季借记卡(银联卡)", "焦作市商业银行·月季城市通(银联卡)",
        "焦作市商业银行·中国旅游卡", "温州银行·金鹿卡", "汉口银行·九通卡(银联卡)", "汉口银行·九通卡",
        "汉口银行·借记卡", "汉口银行·借记卡", "盛京银行·玫瑰卡", "盛京银行·玫瑰IC卡", "盛京银行·玫瑰IC卡",
        "盛京银行·玫瑰卡", "盛京银行·玫瑰卡", "盛京银行·玫瑰卡(银联卡)", "盛京银行·玫瑰卡(银联卡)",
        "盛京银行·盛京银行公务卡", "洛阳银行·都市一卡通(银联卡)", "洛阳银行·都市一卡通(银联卡)", "洛阳银行·--",
        "大连银行·北方明珠卡", "大连银行·人民币借记卡", "大连银行·金融IC借记卡", "大连银行·大连市社会保障卡",
        "大连银行·借记IC卡", "大连银行·借记IC卡", "大连银行·大连市商业银行贷记卡", "大连银行·大连市商业银行贷记卡",
        "大连银行·银联标准公务卡", "苏州市商业银行·姑苏卡", "杭州商业银行·西湖卡", "杭州商业银行·西湖卡",
        "杭州商业银行·借记IC卡", "杭州商业银行·", "南京银行·梅花信用卡公务卡", "南京银行·梅花信用卡商务卡",
        "南京银行·梅花贷记卡(银联卡)", "南京银行·梅花借记卡(银联卡)", "南京银行·白金卡", "南京银行·商务卡",
        "东莞市商业银行·万顺通卡(银联卡)", "东莞市商业银行·万顺通卡(银联卡)", "东莞市商业银行·万顺通借记卡",
        "东莞市商业银行·社会保障卡", "乌鲁木齐市商业银行·雪莲借记IC卡", "乌鲁木齐市商业银行·乌鲁木齐市公务卡",
        "乌鲁木齐市商业银行·福农卡贷记卡", "乌鲁木齐市商业银行·福农卡准贷记卡", "乌鲁木齐市商业银行·雪莲准贷记卡",
        "乌鲁木齐市商业银行·雪莲贷记卡(银联卡)", "乌鲁木齐市商业银行·雪莲借记IC卡",
        "乌鲁木齐市商业银行·雪莲借记卡(银联卡)", "乌鲁木齐市商业银行·雪莲卡(银联卡)", "绍兴银行·兰花IC借记卡",
        "绍兴银行·社保IC借记卡", "绍兴银行·兰花公务卡", "成都商业银行·芙蓉锦程福农卡", "成都商业银行·芙蓉锦程天府通卡",
        "成都商业银行·锦程卡(银联卡)", "成都商业银行·锦程卡金卡", "成都商业银行·锦程卡定活一卡通金卡",
        "成都商业银行·锦程卡定活一卡通", "成都商业银行·锦程力诚联名卡", "成都商业银行·锦程力诚联名卡",
        "成都商业银行·锦程卡(银联卡)", "抚顺银行·借记IC卡", "临商银行·借记卡", "宜昌市商业银行·三峡卡(银联卡)",
        "宜昌市商业银行·信用卡(银联卡)", "葫芦岛市商业银行·一通卡", "葫芦岛市商业银行·一卡通(银联卡)",
        "天津市商业银行·津卡", "天津市商业银行·津卡贷记卡(银联卡)", "天津市商业银行·贷记IC卡", "天津市商业银行·--",
        "天津银行·商务卡", "宁夏银行·宁夏银行公务卡", "宁夏银行·宁夏银行福农贷记卡", "宁夏银行·如意卡(银联卡)",
        "宁夏银行·宁夏银行福农借记卡", "宁夏银行·如意借记卡", "宁夏银行·如意IC卡", "宁夏银行·宁夏银行如意借记卡",
        "宁夏银行·中国旅游卡", "齐商银行·金达卡(银联卡)", "齐商银行·金达借记卡(银联卡)", "齐商银行·金达IC卡",
        "徽商银行·黄山卡", "徽商银行·黄山卡", "徽商银行·借记卡", "徽商银行·徽商银行中国旅游卡(安徽)",
        "徽商银行合肥分行·黄山卡", "徽商银行芜湖分行·黄山卡(银联卡)", "徽商银行马鞍山分行·黄山卡(银联卡)",
        "徽商银行淮北分行·黄山卡(银联卡)", "徽商银行安庆分行·黄山卡(银联卡)", "重庆银行·长江卡(银联卡)",
        "重庆银行·长江卡(银联卡)", "重庆银行·长江卡", "重庆银行·借记IC卡", "哈尔滨银行·丁香一卡通(银联卡)",
        "哈尔滨银行·丁香借记卡(银联卡)", "哈尔滨银行·丁香卡", "哈尔滨银行·福农借记卡",
        "无锡市商业银行·太湖金保卡(银联卡)", "丹东银行·借记IC卡", "丹东银行·丹东银行公务卡", "兰州银行·敦煌卡",
        "南昌银行·金瑞卡(银联卡)", "南昌银行·南昌银行借记卡", "南昌银行·金瑞卡", "晋商银行·晋龙一卡通",
        "晋商银行·晋龙一卡通", "晋商银行·晋龙卡(银联卡)", "青岛银行·金桥通卡", "青岛银行·金桥卡(银联卡)",
        "青岛银行·金桥卡(银联卡)", "青岛银行·金桥卡", "青岛银行·借记IC卡", "吉林银行·雾凇卡(银联卡)",
        "吉林银行·雾凇卡(银联卡)", "南通商业银行·金桥卡(银联卡)", "南通商业银行·金桥卡(银联卡)",
        "日照银行·黄海卡、财富卡借记卡", "鞍山银行·千山卡(银联卡)", "鞍山银行·千山卡(银联卡)", "鞍山银行·千山卡",
        "青海银行·三江银行卡(银联卡)", "青海银行·三江卡", "台州银行·大唐贷记卡", "台州银行·大唐准贷记卡",
        "台州银行·大唐卡(银联卡)", "台州银行·大唐卡", "台州银行·借记卡", "台州银行·公务卡",
        "泉州银行·海峡银联卡(银联卡)", "泉州银行·海峡储蓄卡", "泉州银行·海峡银联卡(银联卡)", "泉州银行·海峡卡",
        "泉州银行·公务卡", "昆明商业银行·春城卡(银联卡)", "昆明商业银行·春城卡(银联卡)",
        "昆明商业银行·富滇IC卡(复合卡)", "阜新银行·借记IC卡", "嘉兴银行·南湖借记卡(银联卡)", "廊坊银行·白金卡",
        "廊坊银行·金卡", "廊坊银行·银星卡(银联卡)", "廊坊银行·龙凤呈祥卡", "内蒙古银行·百灵卡(银联卡)",
        "内蒙古银行·成吉思汗卡", "湖州市商业银行·百合卡", "湖州市商业银行·", "沧州银行·狮城卡",
        "南宁市商业银行·桂花卡(银联卡)", "包商银行·雄鹰卡(银联卡)", "包商银行·包头市商业银行借记卡",
        "包商银行·雄鹰贷记卡", "包商银行·包商银行内蒙古自治区公务卡", "包商银行·贷记卡", "包商银行·借记卡",
        "连云港市商业银行·金猴神通借记卡", "威海商业银行·通达卡(银联卡)", "威海市商业银行·通达借记IC卡",
        "攀枝花市商业银行·攀枝花卡(银联卡)", "攀枝花市商业银行·攀枝花卡", "绵阳市商业银行·科技城卡(银联卡)",
        "泸州市商业银行·酒城卡(银联卡)", "泸州市商业银行·酒城IC卡", "大同市商业银行·云冈卡(银联卡)",
        "三门峡银行·天鹅卡(银联卡)", "广东南粤银行·南珠卡(银联卡)", "张家口市商业银行·好运IC借记卡",
        "桂林市商业银行·漓江卡(银联卡)", "龙江银行·福农借记卡", "龙江银行·联名借记卡", "龙江银行·福农借记卡",
        "龙江银行·龙江IC卡", "龙江银行·社会保障卡", "龙江银行·--", "江苏长江商业银行·长江卡",
        "徐州市商业银行·彭城借记卡(银联卡)", "南充市商业银行·借记IC卡", "南充市商业银行·熊猫团团卡",
        "莱商银行·银联标准卡", "莱芜银行·金凤卡", "莱商银行·借记IC卡", "德阳银行·锦程卡定活一卡通",
        "德阳银行·锦程卡定活一卡通金卡", "德阳银行·锦程卡定活一卡通", "唐山市商业银行·唐山市城通卡",
        "曲靖市商业银行·珠江源卡", "曲靖市商业银行·珠江源IC卡", "温州银行·金鹿信用卡", "温州银行·金鹿信用卡",
        "温州银行·金鹿公务卡", "温州银行·贷记IC卡", "汉口银行·汉口银行贷记卡", "汉口银行·汉口银行贷记卡",
        "汉口银行·九通香港旅游贷记普卡", "汉口银行·九通香港旅游贷记金卡", "汉口银行·贷记卡", "汉口银行·九通公务卡",
        "江苏银行·聚宝借记卡", "江苏银行·月季卡", "江苏银行·紫金卡", "江苏银行·绿扬卡(银联卡)",
        "江苏银行·月季卡(银联卡)", "江苏银行·九州借记卡(银联卡)", "江苏银行·月季卡(银联卡)",
        "江苏银行·聚宝惠民福农卡", "江苏银行·江苏银行聚宝IC借记卡", "江苏银行·聚宝IC借记卡VIP卡",
        "长治市商业银行·长治商行银联晋龙卡", "承德市商业银行·热河卡", "承德银行·借记IC卡", "德州银行·长河借记卡",
        "德州银行·--", "遵义市商业银行·社保卡", "遵义市商业银行·尊卡", "邯郸市商业银行·邯银卡",
        "邯郸市商业银行·邯郸银行贵宾IC借记卡", "安顺市商业银行·黄果树福农卡", "安顺市商业银行·黄果树借记卡",
        "江苏银行·紫金信用卡(公务卡)", "江苏银行·紫金信用卡", "江苏银行·天翼联名信用卡", "平凉市商业银行·广成卡",
        "玉溪市商业银行·红塔卡", "玉溪市商业银行·红塔卡", "浙江民泰商业银行·金融IC卡", "浙江民泰商业银行·民泰借记卡",
        "浙江民泰商业银行·金融IC卡C卡", "浙江民泰商业银行·银联标准普卡金卡", "浙江民泰商业银行·商惠通",
        "上饶市商业银行·三清山卡", "东营银行·胜利卡", "泰安市商业银行·岱宗卡", "泰安市商业银行·市民一卡通",
        "浙江稠州商业银行·义卡", "浙江稠州商业银行·义卡借记IC卡", "浙江稠州商业银行·公务卡", "自贡市商业银行·借记IC卡",
        "自贡市商业银行·锦程卡", "鄂尔多斯银行·天骄公务卡", "鹤壁银行·鹤卡", "许昌银行·连城卡", "铁岭银行·龙凤卡",
        "乐山市商业银行·大福卡", "乐山市商业银行·--", "长安银行·长长卡", "长安银行·借记IC卡",
        "重庆三峡银行·财富人生卡", "重庆三峡银行·借记卡", "石嘴山银行·麒麟借记卡", "石嘴山银行·麒麟借记卡",
        "石嘴山银行·麒麟公务卡", "盘锦市商业银行·鹤卡", "盘锦市商业银行·盘锦市商业银行鹤卡", "平顶山银行·平顶山银行公务卡",
        "朝阳银行·鑫鑫通卡", "朝阳银行·朝阳银行福农卡", "朝阳银行·红山卡", "宁波东海银行·绿叶卡",
        "遂宁市商业银行·锦程卡", "遂宁是商业银行·金荷卡", "保定银行·直隶卡", "保定银行·直隶卡",
        "凉山州商业银行·锦程卡", "凉山州商业银行·金凉山卡", "漯河银行·福卡", "漯河银行·福源卡", "漯河银行·福源公务卡",
        "达州市商业银行·锦程卡", "新乡市商业银行·新卡", "晋中银行·九州方圆借记卡", "晋中银行·九州方圆卡",
        "驻马店银行·驿站卡", "驻马店银行·驿站卡", "驻马店银行·公务卡", "衡水银行·金鼎卡", "衡水银行·借记IC卡",
        "周口银行·如愿卡", "周口银行·公务卡", "阳泉市商业银行·金鼎卡", "阳泉市商业银行·金鼎卡",
        "宜宾市商业银行·锦程卡", "宜宾市商业银行·借记IC卡", "库尔勒市商业银行·孔雀胡杨卡", "雅安市商业银行·锦城卡",
        "雅安市商业银行·--", "安阳银行·安鼎卡", "信阳银行·信阳卡", "信阳银行·公务卡", "信阳银行·信阳卡",
        "华融湘江银行·华融卡", "华融湘江银行·华融卡", "营口沿海银行·祥云借记卡", "景德镇商业银行·瓷都卡",
        "哈密市商业银行·瓜香借记卡", "湖北银行·金牛卡", "湖北银行·汉江卡", "湖北银行·借记卡", "湖北银行·三峡卡",
        "湖北银行·至尊卡", "湖北银行·金融IC卡", "西藏银行·借记IC卡", "新疆汇和银行·汇和卡", "广东华兴银行·借记卡",
        "广东华兴银行·华兴银联公司卡", "广东华兴银行·华兴联名IC卡", "广东华兴银行·华兴金融IC借记卡", "濮阳银行·龙翔卡",
        "宁波通商银行·借记卡", "甘肃银行·神舟兴陇借记卡", "甘肃银行·甘肃银行神州兴陇IC卡", "枣庄银行·借记IC卡",
        "本溪市商业银行·借记卡", "盛京银行·医保卡", "上海农商银行·如意卡(银联卡)", "上海农商银行·如意卡(银联卡)",
        "上海农商银行·鑫通卡", "上海农商银行·国际如意卡", "上海农商银行·借记IC卡",
        "常熟市农村商业银行·粒金贷记卡(银联卡)", "常熟市农村商业银行·公务卡", "常熟市农村商业银行·粒金准贷卡",
        "常熟农村商业银行·粒金借记卡(银联卡)", "常熟农村商业银行·粒金IC卡", "常熟农村商业银行·粒金卡",
        "深圳农村商业银行·信通卡(银联卡)", "深圳农村商业银行·信通商务卡(银联卡)", "深圳农村商业银行·信通卡",
        "深圳农村商业银行·信通商务卡", "广州农村商业银行·福农太阳卡", "广东南海农村商业银行·盛通卡",
        "广东南海农村商业银行·盛通卡(银联卡)", "佛山顺德农村商业银行·恒通卡(银联卡)", "佛山顺德农村商业银行·恒通卡",
        "佛山顺德农村商业银行·恒通卡(银联卡)", "江阴农村商业银行·暨阳公务卡", "江阴市农村商业银行·合作贷记卡(银联卡)",
        "江阴农村商业银行·合作借记卡", "江阴农村商业银行·合作卡(银联卡)", "江阴农村商业银行·暨阳卡",
        "重庆农村商业银行·江渝借记卡VIP卡", "重庆农村商业银行·江渝IC借记卡", "重庆农村商业银行·江渝乡情福农卡",
        "东莞农村商业银行·信通卡(银联卡)", "东莞农村商业银行·信通卡(银联卡)", "东莞农村商业银行·信通信用卡",
        "东莞农村商业银行·信通借记卡", "东莞农村商业银行·贷记IC卡", "张家港农村商业银行·一卡通(银联卡)",
        "张家港农村商业银行·一卡通(银联卡)", "张家港农村商业银行·", "北京农村商业银行·信通卡", "北京农村商业银行·惠通卡",
        "北京农村商业银行·凤凰福农卡", "北京农村商业银行·惠通卡", "北京农村商业银行·中国旅行卡", "北京农村商业银行·凤凰卡",
        "天津农村商业银行·吉祥商联IC卡", "天津农村商业银行·信通借记卡(银联卡)", "天津农村商业银行·借记IC卡",
        "鄞州农村合作银行·蜜蜂借记卡(银联卡)", "宁波鄞州农村合作银行·蜜蜂电子钱包(IC)",
        "宁波鄞州农村合作银行·蜜蜂IC借记卡", "宁波鄞州农村合作银行·蜜蜂贷记IC卡", "宁波鄞州农村合作银行·蜜蜂贷记卡",
        "宁波鄞州农村合作银行·公务卡", "成都农村商业银行·福农卡", "成都农村商业银行·福农卡",
        "珠海农村商业银行·信通卡(银联卡)", "太仓农村商业银行·郑和卡(银联卡)", "太仓农村商业银行·郑和IC借记卡",
        "无锡农村商业银行·金阿福", "无锡农村商业银行·借记IC卡", "黄河农村商业银行·黄河卡",
        "黄河农村商业银行·黄河富农卡福农卡", "黄河农村商业银行·借记IC卡", "天津滨海农村商业银行·四海通卡",
        "天津滨海农村商业银行·四海通e芯卡", "武汉农村商业银行·汉卡", "武汉农村商业银行·汉卡",
        "武汉农村商业银行·中国旅游卡", "江南农村商业银行·阳湖卡(银联卡)", "江南农村商业银行·天天红火卡",
        "江南农村商业银行·借记IC卡", "海口联合农村商业银行·海口联合农村商业银行合卡", "湖北嘉鱼吴江村镇银行·垂虹卡",
        "福建建瓯石狮村镇银行·玉竹卡", "浙江平湖工银村镇银行·金平卡", "重庆璧山工银村镇银行·翡翠卡",
        "重庆农村商业银行·银联标准贷记卡", "重庆农村商业银行·公务卡", "南阳村镇银行·玉都卡",
        "晋中市榆次融信村镇银行·魏榆卡", "三水珠江村镇银行·珠江太阳卡", "东营莱商村镇银行·绿洲卡", "建设银行·单位结算卡",
        "玉溪市商业银行·红塔卡" };

    /**
     * 校验银行卡卡号 是否合法
     *
     * @param cardId
     * @return
     */
    public static boolean checkBankCard(String cardId) {
        char bit = getBankCardCheckCode(cardId
            .substring(0, cardId.length() - 1));
        if (bit == 'N') {
            return false;
        }
        boolean isBankCard = cardId.charAt(cardId.length() - 1) == bit;
        KLog.e("银行卡:" + isBankCard);
        return isBankCard;
    }

    /**
     * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
     *
     * @param nonCheckCodeCardId
     * @return
     */
    public static char getBankCardCheckCode(String nonCheckCodeCardId) {
        if (nonCheckCodeCardId == null
            || nonCheckCodeCardId.trim().length() == 0
            || !nonCheckCodeCardId.matches("\\d+")) {
            // 如果传的不是数据返回N
            return 'N';
        }
        char[] chs = nonCheckCodeCardId.trim().toCharArray();
        int luhmSum = 0;
        for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
            int k = chs[i] - '0';
            if (j % 2 == 0) {
                k *= 2;
                k = k / 10 + k % 10;
            }
            luhmSum += k;
        }
        return (luhmSum % 10 == 0) ? '0' : (char) ((10 - luhmSum % 10) + '0');
    }

    /**
     * 通过银行卡 的前六位确定 判断银行开户行及卡种
     * */
    public static String getNameOfBank(String cardbin) {
        // 通过银行卡的前6位确定
        cardbin = cardbin.substring(0, 6);
        int index = -1;
        for (int i = 0; i < BANKBIN.length; i++) {
            if (cardbin.equals(BANKBIN[i])) {
                index = i;
            }
        }
        if (index == -1) {
            return "";
        }
        return BANKNAME[index];
    }
}

AppDateMgr.java

java 复制代码
package com.jingewenku.abrahamcaijin.commonutil;


import com.jingewenku.abrahamcaijin.commonutil.klog.KLog;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * @Description:主要功能:时间日期管理
 *
 * @Prject: CommonUtilLibrary
 * @Package: com.jingewenku.abrahamcaijin.commonutil
 * @author: june
 * @date: 2017年05月05日 14:18
 * @Copyright: 个人版权所有
 * @Company:
 * @version: 1.0.0
 */

public class AppDateMgr {

    public AppDateMgr() {
        throw new UnsupportedOperationException("cannot be instantiated");
    }

    public static final SimpleDateFormat YYYYMMDD_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
    public static final SimpleDateFormat HHMMSS_FORMAT = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
    public static final SimpleDateFormat YYYYMMDDHHMMSS_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    private static final String[] CHINESE_ZODIAC = new String[]{"猴", "鸡", "狗", "猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊"};
    private static final String[] ZODIAC = new String[]{"水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "魔羯座"};

    private static final int[] ZODIAC_FLAGS = new int[]{20, 19, 21, 21, 21, 22, 23, 23, 23, 24, 23, 22};

    /**
     * 获取北京时区
     * @return
     */
    public static TimeZone getBeijingTimeZone(){
        return TimeZone.getTimeZone("GMT+8:00");
    }

    /**
     * 获取当前手机对应的系统时区
     *
     */
    public static TimeZone getPhoneTimeZone()
    {
        return TimeZone.getDefault();
    }

    /**
     * 以"GMT+8:00"形式返回当前系统对应的时区
     * @return
     */
    public static String getCurrentTimeZoneStr()
    {
        TimeZone tz = TimeZone.getDefault();
        return createGmtOffsetString(true,true,tz.getRawOffset());
    }

    public static String createGmtOffsetString(boolean includeGmt,
        boolean includeMinuteSeparator, int offsetMillis) {
        int offsetMinutes = offsetMillis / 60000;
        char sign = '+';
        if (offsetMinutes < 0) {
            sign = '-';
            offsetMinutes = -offsetMinutes;
        }
        StringBuilder builder = new StringBuilder(9);
        if (includeGmt) {
            builder.append("GMT");
        }
        builder.append(sign);
        appendNumber(builder, 2, offsetMinutes / 60);
        if (includeMinuteSeparator) {
            builder.append(':');
        }
        appendNumber(builder, 2, offsetMinutes % 60);
        return builder.toString();
    }

    private static void appendNumber(StringBuilder builder, int count, int value) {
        String string = Integer.toString(value);
        for (int i = 0; i < count - string.length(); i++) {
            builder.append('0');
        }
        builder.append(string);
    }

    /**
     * 获取更改时区后的时间
     * @param date 时间
     * @param oldZone 旧时区
     * @param newZone 新时区
     * @return 时间
     */
    public static Date changeTimeZone(Date date, TimeZone oldZone, TimeZone newZone)
    {
        Date dateTmp = null;
        if (date != null)
        {
            int timeOffset = oldZone.getRawOffset() - newZone.getRawOffset();
            dateTmp = new Date(date.getTime() - timeOffset);
        }
        return dateTmp;
    }

    /**
     * 将北京时区的时间转化为当前系统对应时区的时间
     * @param beijingTime
     * @param format
     * @return
     */
    public static String beijingTime2PhoneTime(String beijingTime,String format){
        Date beijingDate = parseToDate(beijingTime, format);
        Date phoneDate = changeTimeZone(beijingDate, getBeijingTimeZone(), getPhoneTimeZone());
        String phoneTime= formatDateToStr(phoneDate,format);
        return phoneTime;
    }

    /**
     * 将日期字符串转换为Date对象
     * @param date 日期字符串,必须为"yyyy-MM-dd HH:mm:ss"
     * @param format 格式化字符串
     * @return 日期字符串的Date对象表达形式
     * */
    public static Date parseToDate(String date, String format)
    {
        Date dt = null;
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        try
        {
            dt = dateFormat.parse(date);
        }
        catch(ParseException e)
        {
            e.printStackTrace();
        }

        return dt;
    }

    /**
     * 将date----->String
     * 将Date对象转换为指定格式的字符串
     * @param date Date对象
     * @param //String format 格式化字符串
     * @return Date对象的字符串表达形式
     * */
    public static String formatDateToStr(Date date, String format)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        return dateFormat.format(date);
    }

    /** 格式化日期的标准字符串 */
    public final static String Detail_Format = "yyyy-MM-dd HH:mm:ss";

    /**
     * 将本地系统对应时区的时间转换为上北京时区对应的时间
     * @param phoneTime
     * @return
     */
    public static String phoneTime2BeijingTime(String phoneTime){
        Date phoneDate = parseToDate(phoneTime, Detail_Format);
        Date beijingDate = changeTimeZone(phoneDate,getPhoneTimeZone(), getBeijingTimeZone());
        String beijingTime= formatDateToStr(beijingDate,Detail_Format);
        return beijingTime;
    }



    /**
     * 当天的年月日
     * @return
     */
    public static String todayYyyyMmDd() {
        return YYYYMMDD_FORMAT.format(new Date());
    }

    /**
     * 当天的时分秒
     * @return
     */
    public static String todayHhMmSs() {
        return HHMMSS_FORMAT.format(new Date());
    }

    /**
     * 当天的年月日时分秒
     * @return
     */
    public static String todayYyyyMmDdHhMmSs() {
        return YYYYMMDDHHMMSS_FORMAT.format(new Date());
    }

    /**
     * 获取年
     * @param dateTime
     * @return
     */
    public static int parseYyyy(String dateTime) {
        try {
            Calendar e = Calendar.getInstance();
            Date date = YYYYMMDDHHMMSS_FORMAT.parse(dateTime);
            e.setTime(date);
            return e.get(1);
        } catch (ParseException var3) {
            var3.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取年
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static int parseYyyy(String dateTime, SimpleDateFormat simpleDateFormat) {
        try {
            Calendar e = Calendar.getInstance();
            Date date = simpleDateFormat.parse(dateTime);
            e.setTime(date);
            return e.get(1);
        } catch (ParseException var4) {
            var4.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取年
     * @param date
     * @return
     */
    public static int parseYyyy(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(1);
    }

    /**
     * 获取月
     * @param dateTime
     * @return
     */
    public static int parseMm(String dateTime) {
        try {
            Calendar e = Calendar.getInstance();
            Date date = YYYYMMDDHHMMSS_FORMAT.parse(dateTime);
            e.setTime(date);
            return e.get(2);
        } catch (ParseException var3) {
            var3.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取月
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static int parseMm(String dateTime, SimpleDateFormat simpleDateFormat) {
        try {
            Calendar e = Calendar.getInstance();
            Date date = simpleDateFormat.parse(dateTime);
            e.setTime(date);
            return e.get(2);
        } catch (ParseException var4) {
            var4.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取月
     * @param date
     * @return
     */
    public static int parseMm(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(2);
    }

    /**
     * 获取日
     * @param dateTime
     * @return
     */
    public static int parseDd(String dateTime) {
        try {
            Calendar e = Calendar.getInstance();
            Date date = YYYYMMDDHHMMSS_FORMAT.parse(dateTime);
            e.setTime(date);
            return e.get(5);
        } catch (ParseException var3) {
            var3.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取日
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static int parseDd(String dateTime, SimpleDateFormat simpleDateFormat) {
        try {
            Calendar e = Calendar.getInstance();
            Date date = simpleDateFormat.parse(dateTime);
            e.setTime(date);
            return e.get(5);
        } catch (ParseException var4) {
            var4.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取日
     * @param date
     * @return
     */
    public static int parseDd(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(5);
    }

    /**
     * 获取年月日
     * @param dateTime
     * @return
     */
    public static String parseYyyyMmDd(String dateTime) {
        String result = "";

        try {
            Date e = YYYYMMDDHHMMSS_FORMAT.parse(dateTime);
            result = YYYYMMDD_FORMAT.format(e);
        } catch (ParseException var3) {
            var3.printStackTrace();
        }

        return result;
    }

    /**
     * 获取年月日
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static String parseYyyyMmDd(String dateTime, SimpleDateFormat simpleDateFormat) {
        String result = "";

        try {
            Date e = simpleDateFormat.parse(dateTime);
            result = YYYYMMDD_FORMAT.format(e);
        } catch (ParseException var4) {
            var4.printStackTrace();
        }

        return result;
    }

    /**
     * 获取年月日
     * @param date
     * @return
     */
    public static String parseYyyyMmDd(Date date) {
        return YYYYMMDD_FORMAT.format(date);
    }

    /**
     * 时分秒
     * @param dateTime
     * @return
     */
    public static String parseHhMmSs(String dateTime) {
        try {
            Date e = YYYYMMDDHHMMSS_FORMAT.parse(dateTime);
            return HHMMSS_FORMAT.format(e);
        } catch (ParseException var2) {
            var2.printStackTrace();
            return "";
        }
    }

    /**
     * 时分秒
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static String parseHhMmSs(String dateTime, SimpleDateFormat simpleDateFormat) {
        try {
            Date e = simpleDateFormat.parse(dateTime);
            return HHMMSS_FORMAT.format(e);
        } catch (ParseException var3) {
            var3.printStackTrace();
            return "";
        }
    }

    /**
     * 时分秒
     * @param date
     * @return
     */
    public static String parseHhMmSs(Date date) {
        return HHMMSS_FORMAT.format(date);
    }

    /**
     * 获取星期几
     * @param dateTime
     * @return
     */
    public static int getWeekNumber(String dateTime) {
        return getWeekNumber(string2Date(dateTime, YYYYMMDDHHMMSS_FORMAT));
    }

    /**
     * 获取星期几
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static int getWeekNumber(String dateTime, SimpleDateFormat simpleDateFormat) {
        return getWeekNumber(string2Date(dateTime, simpleDateFormat));
    }

    /**
     * 获取星期几
     * @param date
     * @return
     */
    public static int getWeekNumber(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(7);
    }

    /**
     * 日期中某个月份的第几周
     * @param dateTime
     * @return
     */
    public static int getWeekOfMonth(String dateTime) {
        return getWeekOfMonth(string2Date(dateTime, YYYYMMDDHHMMSS_FORMAT));
    }

    /**
     * 日期中某个月份的第几周
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static int getWeekOfMonth(String dateTime, SimpleDateFormat simpleDateFormat) {
        return getWeekOfMonth(string2Date(dateTime, simpleDateFormat));
    }

    /**
     * 日期中某个月份的第几周
     * @param date
     * @return
     */
    public static int getWeekOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(4);
    }

    /**
     * 日期中某个年份的第几周
     * @param time
     * @return
     */
    public static int getWeekOfYear(String time) {
        return getWeekOfYear(string2Date(time, YYYYMMDDHHMMSS_FORMAT));
    }

    /**
     * 日期中某个年份的第几周
     * @param time
     * @param simpleDateFormat
     * @return
     */
    public static int getWeekOfYear(String time, SimpleDateFormat simpleDateFormat) {
        return getWeekOfYear(string2Date(time, simpleDateFormat));
    }

    /**
     * 日期中某个年份的第几周
     * @param date
     * @return
     */
    public static int getWeekOfYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(3);
    }

    /**
     * 将年月日时分秒转成Long类型
     * @param dateTime
     * @return
     */
    public static Long dateTimeToTimeStamp(String dateTime) {
        try {
            Date e = YYYYMMDDHHMMSS_FORMAT.parse(dateTime);
            return Long.valueOf(e.getTime() / 1000L);
        } catch (ParseException var2) {
            var2.printStackTrace();
            return Long.valueOf(0L);
        }
    }

    /**
     * 将Long类型转成年月日时分秒
     * @param timeStamp
     * @return
     */
    public static String timeStampToDateTime(Long timeStamp) {
        return YYYYMMDDHHMMSS_FORMAT.format(new Date(timeStamp.longValue() * 1000L));
    }

    /**
     * 将年月日时分秒转成Date类型
     * @param time
     * @return
     */
    public static Date string2Date(String time) {
        return string2Date(time, YYYYMMDDHHMMSS_FORMAT);
    }

    /**
     * 将年月日时分秒转成Date类型
     * @param time
     * @param simpleDateFormat
     * @return
     */
    public static Date string2Date(String time, SimpleDateFormat simpleDateFormat) {
        try {
            return simpleDateFormat.parse(time);
        } catch (ParseException var3) {
            var3.printStackTrace();
            return null;
        }
    }

    /**
     * 将Date类型转成年月日时分秒
     * @param date
     * @return
     */
    public static String date2String(Date date) {
        return date2String(date, YYYYMMDDHHMMSS_FORMAT);
    }

    /**
     * 将Date类型转成年月日时分秒
     * @param date
     * @param simpleDateFormat
     * @return
     */
    public static String date2String(Date date, SimpleDateFormat simpleDateFormat) {
        return simpleDateFormat.format(date);
    }

    /**
     * 比较日期
     * @param standDate
     * @param desDate
     * @return
     */
    public static boolean dateIsBefore(String standDate, String desDate) {
        try {
            return YYYYMMDDHHMMSS_FORMAT.parse(desDate).before(YYYYMMDDHHMMSS_FORMAT.parse(standDate));
        } catch (ParseException var3) {
            var3.printStackTrace();
            return false;
        }
    }

    /**
     * 相差多少分钟
     * @param beginDate
     * @param endDate
     * @return
     */
    public static long minutesBetweenTwoDate(String beginDate, String endDate) {
        long millisBegin = dateTimeToTimeStamp(beginDate).longValue();
        long millisEnd = dateTimeToTimeStamp(endDate).longValue();
        return (millisEnd - millisBegin) / 60L;
    }

    /**
     * 获取日期中的生肖
     * @param dateTime
     * @return
     */
    public static String getChineseZodiac(String dateTime) {
        int yyyy = parseYyyy(dateTime);
        return getChineseZodiac(yyyy);
    }

    /**
     * 获取日期中的生肖
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static String getChineseZodiac(String dateTime, SimpleDateFormat simpleDateFormat) {
        int yyyy = parseYyyy(dateTime, simpleDateFormat);
        return getChineseZodiac(yyyy);
    }

    /**
     * 获取日期中的生肖
     * @param date
     * @return
     */
    public static String getChineseZodiac(Date date) {
        int yyyy = parseYyyy(date);
        return getChineseZodiac(yyyy);
    }

    /**
     * 获取日期中的生肖
     * @param year
     * @return
     */
    public static String getChineseZodiac(int year) {
        return CHINESE_ZODIAC[year % 12];
    }

    /**
     * 获取日期中的星座
     * @param dateTime
     * @return
     */
    public static String getZodiac(String dateTime) {
        int dd = parseDd(dateTime);
        int month = parseMm(dateTime);
        return getZodiac(month, dd);
    }

    /**
     * 获取日期中的星座
     * @param dateTime
     * @param simpleDateFormat
     * @return
     */
    public static String getZodiac(String dateTime, SimpleDateFormat simpleDateFormat) {
        int dd = parseDd(dateTime, simpleDateFormat);
        int month = parseMm(dateTime, simpleDateFormat);
        return getZodiac(month, dd);
    }

    /**
     * 获取日期中的星座
     * @param date
     * @return
     */
    public static String getZodiac(Date date) {
        int dd = parseDd(date);
        int month = parseMm(date);
        return getZodiac(month, dd);
    }

    /**
     * 获取日期中的星座
     * @param month
     * @param day
     * @return
     */
    public static String getZodiac(int month, int day) {
        return ZODIAC[day >= ZODIAC_FLAGS[month - 1]?month - 1:(month + 10) % 12];
    }

    /**
     * 获取日期
     *
     * @param offset 表示偏移天数
     * @return
     */
    public String getNowDayOffset(int offset) {
        Calendar m_Calendar = Calendar.getInstance();
        long time = (long) m_Calendar.getTimeInMillis();
        time = time + offset * 24 * 3600 * 1000;
        Date myDate = new Date(time);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        return df.format(myDate);
    }

    /**
     * 获取日期
     *
     * @param
     * @return
     */
    public String getTime(long time) {
        Date myDate = new Date(time);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return df.format(myDate);
    }

    /**
     * 使指定日期向前走一天,变成"明天"的日期
     *
     * @param cal 等处理日期
     */
    public void forward(Calendar cal) {
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH);//0到11
        int day = cal.get(Calendar.DAY_OF_MONTH);
        int days = getDaysOfMonth(year, month + 1);
        if (day == days) {//如果是本月最后一天,还要判断年份是不是要向前滚
            if (month == 11) {//如果是12月份,年份要向前滚
                cal.roll(Calendar.YEAR, true);
                cal.set(Calendar.MONTH, 0);//月份,第一月是0
                cal.set(Calendar.DAY_OF_MONTH, 1);

            } else {//如果不是12月份
                cal.roll(Calendar.MONTH, true);
                cal.set(Calendar.DAY_OF_MONTH, 1);
            }

        } else {
            cal.roll(Calendar.DAY_OF_MONTH, 1);//如果是月内,直接天数加1
        }
    }

    /**
     * 使日期倒一天
     *
     * @param cal
     */
    public void backward(Calendar cal) {
        //计算上一月有多少天
        int month = cal.get(Calendar.MONTH);//0到11
        int year = cal.get(Calendar.YEAR);
        int days = getDaysOfMonth(year, month);//上个月的天数
        int day = cal.get(Calendar.DAY_OF_MONTH);
        if (day == 1) {//如果是本月第一天,倒回上一月
            if (month == 0) {//如果是本年第一个月,年份倒一天
                cal.roll(Calendar.YEAR, false);
                cal.set(Calendar.MONTH, 11);//去年最后一个月是12月
                cal.set(Calendar.DAY_OF_MONTH, 31);//12月最后一天总是31号
            } else {//月份向前
                cal.roll(Calendar.MONTH, false);
                cal.set(Calendar.DAY_OF_MONTH, days);//上个月最后一天
            }
        } else {
            cal.roll(Calendar.DAY_OF_MONTH, false);//如果是月内,日期倒一天
        }
    }

    /**
     * 判断平年闰年
     *
     * @param year
     * @return true表示闰年,false表示平年
     */
    public boolean isLeapYear(int year) {
        if (year % 400 == 0) {
            return true;
        } else if (year % 100 != 0 && year % 4 == 0) {
            return true;
        }
        return false;
    }

    /**
     * 计算某月的天数
     *
     * @param year
     * @param month 现实生活中的月份,不是系统存储的月份,从1到12
     * @return
     */

    public int getDaysOfMonth(int year, int month) {
        if (month < 1 || month > 12) {
            return 0;
        }
        boolean isLeapYear = isLeapYear(year);
        int daysOfMonth = 0;
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                daysOfMonth = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                daysOfMonth = 30;
                break;
            case 2:
                if (isLeapYear) {
                    daysOfMonth = 29;
                } else {
                    daysOfMonth = 28;
                }

        }
        return daysOfMonth;
    }

    /**
     * 获取当天凌晨的秒数
     *
     * @return
     */
    public long secondsMorning(Calendar c) {
        Calendar tempCalendar = Calendar.getInstance();
        tempCalendar.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        return tempCalendar.getTimeInMillis();
    }

    /**
     * 获取第二天凌晨的秒数
     *
     * @return
     */
    public long secondsNight(Calendar c) {
        Calendar tempCalendar = Calendar.getInstance();
        tempCalendar.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        forward(tempCalendar);
        return tempCalendar.getTimeInMillis();
    }

    /**
     * 判断某两天是不是同一天
     *
     * @param c1
     * @param c2
     * @return
     */
    public boolean isSameDay(Calendar c1, Calendar c2) {

        if (c1.get(Calendar.YEAR) != c2.get(Calendar.YEAR))
            return false;
        if (c1.get(Calendar.MONTH) != c2.get(Calendar.MONTH))
            return false;
        if (c1.get(Calendar.DAY_OF_MONTH) != c2.get(Calendar.DAY_OF_MONTH))
            return false;
        return true;
    }

    /** 日期格式:yyyy-MM-dd HH:mm:ss **/
    public static final String DF_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

    /** 日期格式:yyyy-MM-dd HH:mm **/
    public static final String DF_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";

    /** 日期格式:yyyy-MM-dd **/
    public static final String DF_YYYY_MM_DD = "yyyy-MM-dd";

    /** 日期格式:HH:mm:ss **/
    public static final String DF_HH_MM_SS = "HH:mm:ss";

    /** 日期格式:HH:mm **/
    public static final String DF_HH_MM = "HH:mm";

    private final static long MINUTE = 60 * 1000;// 1分钟
    private final static long HOUR = 60 * MINUTE;// 1小时
    private final static long DAY = 24 * HOUR;// 1天
    private final static long MONTH = 31 * DAY;// 月
    private final static long YEAR = 12 * MONTH;// 年

    /** Log输出标识 **/
    private static final String TAG = AppDateMgr.class.getSimpleName();

    /**
     * 将日期格式化成友好的字符串:几分钟前、几小时前、几天前、几月前、几年前、刚刚
     *
     * @param date
     * @return
     */
    public static String formatFriendly(Date date) {
        if (date == null) {
            return null;
        }
        long diff = new Date().getTime() - date.getTime();
        long r = 0;
        if (diff > YEAR) {
            r = (diff / YEAR);
            return r + "年前";
        }
        if (diff > MONTH) {
            r = (diff / MONTH);
            return r + "个月前";
        }
        if (diff > DAY) {
            r = (diff / DAY);
            return r + "天前";
        }
        if (diff > HOUR) {
            r = (diff / HOUR);
            return r + "个小时前";
        }
        if (diff > MINUTE) {
            r = (diff / MINUTE);
            return r + "分钟前";
        }
        return "刚刚";
    }

    /**
     * 将日期以yyyy-MM-dd HH:mm:ss格式化
     *
     * @param dateL
     *            日期
     * @return
     */
    public static String formatDateTime(long dateL) {
        SimpleDateFormat sdf = new SimpleDateFormat(DF_YYYY_MM_DD_HH_MM_SS);
        Date date = new Date(dateL);
        return sdf.format(date);
    }

    /**
     * 将日期以yyyy-MM-dd HH:mm:ss格式化
     *
     * @param dateL
     *            日期
     * @return
     */
    public static String formatDateTime(long dateL, String formater) {
        SimpleDateFormat sdf = new SimpleDateFormat(formater);
        return sdf.format(new Date(dateL));
    }

    /**
     * 将日期以yyyy-MM-dd HH:mm:ss格式化
     *
     * @param formater
     *            日期
     * @return
     */
    public static String formatDateTime(Date date, String formater) {
        SimpleDateFormat sdf = new SimpleDateFormat(formater);
        return sdf.format(date);
    }

    /**
     * 将日期字符串转成日期
     *
     * @param strDate
     *            字符串日期
     * @return java.util.date日期类型
     */

    public static Date parseDate(String strDate) {
        DateFormat dateFormat = new SimpleDateFormat(DF_YYYY_MM_DD_HH_MM_SS);
        Date returnDate = null;
        try {
            returnDate = dateFormat.parse(strDate);
        } catch (ParseException e) {
            KLog.v(TAG, "parseDate failed !");

        }
        return returnDate;

    }

    /**
     * 获取系统当前日期
     *
     * @return
     */
    public static Date gainCurrentDate() {
        return new Date();
    }

    /**
     * 验证日期是否比当前日期早
     *
     * @param target1
     *            比较时间1
     * @param target2
     *            比较时间2
     * @return true 则代表target1比target2晚或等于target2,否则比target2早
     */
    public static boolean compareDate(Date target1, Date target2) {
        boolean flag = false;
        try {
            String target1DateTime = AppDateMgr.formatDateTime(target1,
                DF_YYYY_MM_DD_HH_MM_SS);
            String target2DateTime = AppDateMgr.formatDateTime(target2,
                DF_YYYY_MM_DD_HH_MM_SS);
            if (target1DateTime.compareTo(target2DateTime) <= 0) {
                flag = true;
            }
        } catch (Exception e1) {
            KLog.e("比较失败,原因:" + e1.getMessage());
        }
        return flag;
    }

    /**
     * 对日期进行增加操作
     *
     * @param target
     *            需要进行运算的日期
     * @param hour
     *            小时
     * @return
     */
    public static Date addDateTime(Date target, double hour) {
        if (null == target || hour < 0) {
            return target;
        }

        return new Date(target.getTime() + (long) (hour * 60 * 60 * 1000));
    }

    /**
     * 对日期进行相减操作
     *
     * @param target
     *            需要进行运算的日期
     * @param hour
     *            小时
     * @return
     */
    public static Date subDateTime(Date target, double hour) {
        if (null == target || hour < 0) {
            return target;
        }

        return new Date(target.getTime() - (long) (hour * 60 * 60 * 1000));
    }
    private static SimpleDateFormat second = new SimpleDateFormat(
        "yy-MM-dd hh:mm:ss");

    private static SimpleDateFormat day = new SimpleDateFormat("yyyy-MM-dd");
    private static SimpleDateFormat detailDay = new SimpleDateFormat("yyyy年MM月dd日");
    private static SimpleDateFormat fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
    private static SimpleDateFormat tempTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static SimpleDateFormat excelDate = new SimpleDateFormat("yyyy/MM/dd");

    /**
     * 格式化excel中的时间
     * @param date
     * @return
     */
    public static String formatDateForExcelDate(Date date) {
        return excelDate.format(date);
    }

    /**
     * 将日期格式化作为文件名
     * @param date
     * @return
     */
    public static String formatDateForFileName(Date date) {
        return fileName.format(date);
    }

    /**
     * 格式化日期(精确到秒)
     *
     * @param date
     * @return
     */
    public static String formatDateSecond(Date date) {
        return second.format(date);
    }

    /**
     * 格式化日期(精确到秒)
     *
     * @param date
     * @return
     */
    public static String tempDateSecond(Date date) {
        return tempTime.format(date);
    }

    /**
     * 格式化日期(精确到秒)
     *
     * @param str
     * @return
     */
    public static Date tempDateSecond(String str) {
        try {
            return tempTime.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new Date();
    }
    /**
     * 格式化日期(精确到天)
     *
     * @param date
     * @return
     */
    public static String formatDateDay(Date date) {
        return day.format(date);
    }

    /**
     * 格式化日期(精确到天)
     *
     * @param date
     * @return
     */
    public static String formatDateDetailDay(Date date) {
        return detailDay.format(date);
    }

    /**
     * 将double类型的数字保留两位小数(四舍五入)
     *
     * @param number
     * @return
     */
    public static String formatNumber(double number) {
        DecimalFormat df = new DecimalFormat();
        df.applyPattern("#0.00");
        return df.format(number);
    }

    /**
     * 将字符串转换成日期
     *
     * @param date
     * @return
     * @throws Exception
     */
    public static Date formateDate(String date) throws Exception {
        return day.parse(date);
    }

    /**
     * 将字符日期转换成Date
     * @param date
     * @return
     * @throws Exception
     */
    public static Date parseStringToDate(String date) throws Exception {
        return day.parse(date);
    }

    /**
     * 将double日期转换成String
     * @param number
     * @return
     */
    public static String formatDoubleNumber(double number) {
        DecimalFormat df = new DecimalFormat("#");
        return df.format(number);
    }

    /**
     * 获得指定Date类型的毫秒数
     * @param date 指定的Date
     * @return 指定Date类型的毫秒数
     */
    public static long getTimeMillis(Date date){
        return date.getTime();
    }

    /**
     * 获得当前时间的毫秒数
     * @return 当前时间的毫秒数
     */
    public static long getCurrentDayTimeMillis(){
        return System.currentTimeMillis();
    }

    /**
     * 将格式化过的时间串转换成毫秒
     * @param day 将格式化过的时间
     * @param format 格式化字符串
     * @return 毫秒
     */
    public static long convertMillisecond(String day, String format) {
        if (day == null || format == null)
            return 0;
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        try {
            Date dt = formatter.parse(day);
            return dt.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 得到两个日期的天数
     * @param sdate1 日期一
     * @param sdate2 日期二
     * @return 天数
     */
    public static int getDateInterval(String sdate1, String sdate2) {
        Date date1 = null;
        Date date2 = null;
        long betweenDays=0;

        try {
            date1 = new SimpleDateFormat("yyyy-MM-dd").parse(sdate1);
            date2 = new SimpleDateFormat("yyyy-MM-dd").parse(sdate2);

            long beginTime = date1.getTime();
            long endTime = date2.getTime();
            betweenDays = (long) ((endTime - beginTime) / (1000 * 60 * 60 * 24));

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return (int) betweenDays;
    }

    /**
     * 时间比较
     * @param format 格式化字符串
     * @param time1 时间1
     * @param time2 时间2
     * @return time1比time2早返回-1,time1与time2相同返回0,time1比time2晚返回1
     */
    public static int compareTime(String format, String time1, String time2) {
        if (format == null || time1 == null || time2 == null)
            return 0;
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();

        try {
            c1.setTime(formatter.parse(time1));
            c2.setTime(formatter.parse(time2));
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return c1.compareTo(c2);
    }

    /**
     * 获得时区偏移量 相对GMT RFC 82
     *
     * @param date
     * @return
     */
    public static String time_offset(Date date) {
        return String.format("%tz", date);
    }

    /**
     * 获得下午或上午
     *
     * @param date
     * @return
     */
    public static String am_or_pm(Date date) {
        return String.format("%tp", date);
    }

    /**
     * 获得当前微妙数 9位
     *
     * @param date
     * @return
     */
    public static String subtle(Date date) {
        return String.format("%tN", date);
    }

    /**
     * 获得当前毫秒数 3位
     *
     * @param date
     * @return
     */
    public static String mill(Date date) {
        return String.format("%tL", date);
    }

    /**
     * 获得当前秒 2位
     *
     * @param date
     * @return
     */
    public static String second(Date date) {
        return String.format("%tS", date);
    }

    /**
     * 获得当前分钟 2位
     *
     * @param date
     * @return
     */
    public static String minute(Date date) {
        return String.format("%tM", date);
    }

    /**
     * 获得当前小时 1-12
     *
     * @param date
     * @return
     */
    public static String hour_l(Date date) {
        return String.format("%tl", date);
    }

    /**
     * 获得当前小时 00-23
     *
     * @param date
     * @return
     */
    public static String hour_H(Date date) {
        return String.format("%tH", date);
    }

    /**
     * 获得当前时间 15:25
     *
     * @param date
     * @return
     */
    public static String hour_minute(Date date) {
        return String.format("%tR", date);
    }

    /**
     * 获得当前时间 15:23:50
     *
     * @param date
     * @return
     */
    public static String hour_minute_second(Date date) {
        return String.format("%tT", date);
    }

    /**
     * 获得当前时间 03:22:06 下午
     *
     * @param date
     * @return
     */
    public static String hour_minute_second_pm_or_am(Date date) {
        return String.format("%tr", date);
    }

    /**
     * 获取当前时间到日 03/25/08(月/日/年)
     *
     * @param date
     * @return
     */
    public static String mdy(Date date) {
        return String.format("%tD", date);
    }

    /**
     * 获取当前时间到日 2008-03-25 年---月---日
     *
     * @param date
     * @return
     */
    public static String ymd(Date date) {
        return String.format("%tF", date);
    }

    /**
     * 获得日期天 1-31
     *
     * @param date
     * @return
     */
    public static String day_one(Date date) {
        return String.format("%te", date);
    }

    /**
     * 获得日期天 01-31
     *
     * @param date
     * @return
     */
    public static String day_two(Date date) {
        return String.format("%td", date);
    }

    /**
     * 一年中的第几天 085
     *
     * @param date
     * @return
     */
    public static String day_to_year(Date date) {
        return String.format("%tj", date);
    }

    /**
     * 获得月份简称
     */
    public static String month_referred(Date date) {
        return String.format("%tb", date);
    }

    /**
     * 获得月份全称
     *
     * @param date
     * @return
     */
    public static String month_full_name(Date date) {
        return String.format("%tB", date);
    }

    /**
     * 获得月份 01-12
     *
     * @param date
     * @return
     */
    public static String month(Date date) {
        return String.format("%tm", date);
    }

    /**
     *获得星期简称
     *
     * @param date
     * @return
     */
    public static String week_referred(Date date) {
        return String.format("%ta", date);
    }

    /**
     * 获得星期全称
     *
     * @param date
     * @return
     */
    public static String week_full_name(Date date) {
        return String.format("%tA", date);
    }

    /**
     * 获得年简称 16
     *
     * @param date
     * @return
     */
    public static String year_referred(Date date) {
        return String.format("%ty", date);
    }

    /**
     * 获得年全称 2016
     *
     * @param date
     * @return
     */
    public static String year_full_name(Date date) {
        return String.format("%tY", date);
    }

    /**
     * 星期二 三月 25 13:37:22 CST 2016
     *
     * @param date
     * @return
     */
    public static String time(Date date) {
        return String.format("%tc", date);
    }

    /**
     * 获取时间戳到秒
     *
     * @param date
     * @return
     */
    public static String time_to_second(Date date) {
        return String.format("%ts", date);
    }

    /**
     * 获取时间戳到毫秒
     *
     * @param date
     * @return
     */
    public static String time_to_mill(Date date) {
        return String.format("%tQ", date);
    }

    /**
     * 获取时间戳到毫秒
     *
     * @return
     */
    public static long time_to_mill() {
        return System.currentTimeMillis();
    }





    //    /**
//     * 身份证号转生日
//     *
//     * @param identityCard 身份证
//     * @return 生日
//     */
//    public static Date identityCard2Date(String identityCard) {
//        try {
//            String dateStr;
//            if (identityCard.length() == 18) {
//                dateStr = identityCard.substring(6, 14);// 截取18位身份证身份证中生日部分
//                return formatDateString(dateStr, "yyyyMMdd");
//            }
//            if (identityCard.length() == 15) {
//                dateStr = identityCard.substring(6, 12);// 截取15位身份证中生日部分
//                return formatDateString(dateStr, "yyMMdd");
//            }
//            return null;
//        } catch (Exception e) {
//            return null;
//        }
//    }
//
//    /**
//     * 格式化日期时间字符串
//     *
//     * @param dateString 日期时间字符串
//     * @param pattern    模式
//     * @return Date对象
//     */
//    public static Date formatDateString(String dateString, String pattern) {
//        try {
//            DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(pattern);
//            return dateTimeFormatter.parseDateTime(dateString).toDate();
//        } catch (Exception e) {
//            return null;
//        }
//    }

}

... ...

虽然并不复杂,但它背后承载的是我多年业务开发中的"踩坑总结 + 代码提炼"。


⚡ 四、第一次 Star 和第一次 Issue

📌 第一个 Star 的那一刻,我几乎跳了起来。

那是项目发布后的第二天,来自一个陌生 ID 的 Star 让我意识到------原来真的有人在看我写的东西!

紧接着,一个 Issue 让我"梦醒"了:

"你在 DateUtils 中的 getStartOfDay 方法在某些时区下会出现偏移,请考虑使用 ZonedDateTime。"

说实话,当时有点懵。但也是这个时刻,我意识到:

✅ "开源不是炫技,而是责任。"

于是我查资料、改代码、补测试,还顺手更新了文档,最终关闭了人生第一个 GitHub Issue。


🧭 五、我从中学到了什么?

开源不是写代码那么简单,它让我真正收获了:

1. 工程意识的提升

  • 如何模块化设计;
  • 如何写清晰的注释与文档;
  • 如何写单元测试;
  • 如何持续集成(CI)和发版。

2. 技术沟通能力

你需要学会:

  • 接受别人指出的问题;
  • 明确地回复 PR 和 Issue;
  • 考虑兼容性与社区反馈。

3. 自驱力 & 成就感

没人强迫你更新,你就是自己的产品经理、开发、测试和运营。

而每一个 Fork、每一次 PR、每一封感谢邮件,都是对你的肯定。


📦 六、项目目前的状态与进展

CommonUtilLibrary 目前:

  • 🌟 GitHub Star 数:2000+
  • ⏳ 累计更新:32 commits
  • 📦 Maven 中央仓库发布成功(支持一键引入)
  • 🤝 被多个 Spring Boot 项目作为基础工具库集成使用

我依然会在空闲时间维护它,或许不会频繁更新,但它代表着一种持续学习与输出的姿态。


📸 七、项目结构截图


复制代码
CommonUtil/
├── application/
│   ├── AppUtils.java
├── encryption/
│   ├── AESUtils.java
│   ├── CipherUtils.java
│   ├── DESUtils.java
│   ├── MD5Utils.java
│   ├── RSAUtils.java
│   ├── SHAUtils.java
│   ├── TripleDESUtils.java
├── view/
│   ├── ScratchCard.java

... ...

🧩 八、建议每一个开发者都拥有自己的开源仓库

你不需要是技术大牛,也不需要做出什么"爆款框架"。

只要你愿意:

  • 把自己项目中抽象出的工具沉淀出来;
  • 把踩坑经验整理成文档;
  • 把学习过程记录下来分享出去...

你已经是一个开源贡献者了。✨


📬 九、结语:一颗 Star,一段成长

我的开源旅程还在继续,而那个凌晨3点、手指颤抖提交代码的我,还在心中鼓励着今天的我。

最后,我想送给每一个准备开源的你一句话:

"不必等完美才开始,开始之后才会逐渐变得完美。"


如果你也有类似的开源初体验,欢迎在评论区留言,一起点亮更多开发者的"星光之路"。


📎 项目地址:https://github.com/AbrahamCaiJin/CommonUtilLibrary

📮 欢迎 Star、PR、Issue 或来信交流,一起让代码温暖世界。


一个开源项目的简单完成 ✅

转载自:https://blog.csdn.net/u014727709/article/details/135322262

欢迎 👍点赞✍评论⭐收藏,欢迎指正

相关推荐
算家计算1 小时前
32K上下文开源语音理解、40分钟深度交互——Voxtral-Small-24B-2507本地部署教程
人工智能·开源·aigc
Koma_zhe1 小时前
【本地部署问答软件Apache Answer】Answer开源平台搭建:cpolar内网穿透服务助力全球用户社区构建
开源·apache
ajassi20004 小时前
开源 Arkts 鸿蒙应用 开发(十七)通讯--http多文件下载
华为·开源·harmonyos
查老师5 小时前
人在上班,突然被开源社区用户点名不要脸?我想问你,你给我刷过几个子儿?
后端·开源·github
lpfasd1235 小时前
当 GitHub 宕机时,我们如何协作?
github
nightunderblackcat5 小时前
进阶向:人物关系三元组,解锁人物关系网络的钥匙
开发语言·python·开源·php
放飞自我的Coder8 小时前
【github-action 如何为github action设置secrets/environment】
github·action
绝无仅有8 小时前
编写 Go 项目的 Dockerfile 文件及生成 Docker 镜像
后端·面试·github
绝无仅有8 小时前
使用 Docker 部署 Go 项目(Beego 框架)
后端·面试·github