文章目录

每日一句正能量
没有到手的东西,总是比到手的稀奇,但不一定比我们已拥有的更好。有些事知道了就好,不必去多说。有些人认识了也就好,不必去深交。你若是找不到坚持下去的理由,那么你就找一个重新开始的理由,生活本来就这么简单。
前言
“你写的第一行代码,或许会被忘记。但你第一个开源项目的星星,却可能照亮你的整个开发旅程。”
✨ 一、写在前面:那天我点下了 “Create Repository”
很多年后回头看,我依然清晰记得那一刻。
那是一个再普通不过的深夜,桌上泡面还冒着热气,我却一边打着哈欠一边兴奋地敲下:
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
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
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
欢迎 👍点赞✍评论⭐收藏,欢迎指正