求坑神newface作品集 98本333 2628 042 q q 谢谢

项目语言:JAVA
权限:read-only(如需更高权限请先加入项目)
Index: Md5Util.java
===================================================================
--- Md5Util.java (revision 0)
+++ Md5Util.java (revision 4)
@@ -0,0 +1,57 @@
+package com.first.
+import java.io.UnsupportedEncodingE
+import java.security.MessageD
+import java.security.NoSuchAlgorithmE
+ * MD5工具类
+ * @author
+public class Md5Util {
* @param str
要加密的字符串
* @return 加密后的32位密文,加密失败返回原字符串.
public static String encrypt(String str) {
MessageDigest messageDigest =
messageDigest = MessageDigest.getInstance(&MD5&);
messageDigest.reset();
messageDigest.update(str.getBytes(&UTF-8&));
} catch (NoSuchAlgorithmException e) {
} catch (UnsupportedEncodingException e) {
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i & byteArray. i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append(&0&).append(
Integer.toHexString(0xFF & byteArray[i]));
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
return md5StrBuff.toString();
* 验证明文是否与密码对应
* @param plaintext
字符串明文
* @param ciphertext
字符md5密文
* @return 验证结果,&code&true&/code&对应 &code&false&/code&不对应
public static boolean validate(String plaintext, String ciphertext) {
return ciphertext.equalsIgnoreCase(encrypt(plaintext));
\ No newline at end of file
Index: images/ValidateCode.java
===================================================================
--- images/ValidateCode.java (revision 0)
+++ images/ValidateCode.java (revision 4)
@@ -0,0 +1,190 @@
+package com.first.utils.
+import java.awt.C
+import java.awt.F
+import java.awt.Graphics2D;
+import java.awt.image.BufferedI
+import java.io.FileOutputS
+import java.io.IOE
+import java.io.OutputS
+import java.util.R
+import javax.imageio.ImageIO;
+ * 验证码生成器
+ * @author
+public class ValidateCode {
* 图片的宽度。
private int width = 160;
* 图片的高度。
private int height = 40;
* 验证码字符个数
private int codeCount = 5;
* 验证码干扰线数
private int lineCount = 10;
* 验证码图片Buffer
private BufferedImage buffI
* 可能的字符
private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8' };
* 无参构造器
public ValidateCode() {
this.createCode();
* 通过图片宽高进行构造
* @param width
* @param height
public ValidateCode(int width, int height) {
this.width =
this.height =
this.createCode();
* 通过图片宽高,字符数,干扰线条数构造
* @param width
* @param height
* @param codeCount
* @param lineCount
干扰线条数
public ValidateCode(int width, int height, int codeCount, int lineCount) {
this.width =
this.height =
this.codeCount = codeC
this.lineCount = lineC
this.createCode();
* 创建验证码
public void createCode() {
int x = 0, fontHeight = 0, codeY = 0;
int red = 0, green = 0, blue = 0;
x = width / (codeCount + 2);// 每个字符的宽度
fontHeight = height - 2;// 字体的高度
codeY = height - 4;
// 图像buffer
buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
// 生成随机数
Random random = new Random();
// 将图像填充为白色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// 创建字体
ImgFontByte imgFont = new ImgFontByte();
Font font = imgFont.getFont(fontHeight);
g.setFont(font);
// 加干扰线
for (int i = 0; i & lineC i++) {
int xs = random.nextInt(width);
int ys = random.nextInt(height);
int xe = random.nextInt(width);
int ye = random.nextInt(height);
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
g.setColor(new Color(red, green, blue));
g.drawLine(xs, ys, xe, ye);
// randomCode记录随机产生的验证码
StringBuffer randomCode = new StringBuffer();
// 随机产生codeCount个字符的验证码。
for (int i = 0; i & codeC i++) {
String strRand = String.valueOf(codeSequence[random
.nextInt(codeSequence.length)]);
// 产生随机的颜色值,让输出的每个字符的颜色值都将不同。
red = random.nextInt(180);
green = random.nextInt(120);
blue = random.nextInt(180);
g.setColor(new Color(red, green, blue));
g.drawString(strRand, (i + 1) * x, codeY);
// 将产生的四个随机数组合在一起。
randomCode.append(strRand);
code = randomCode.toString();
* 将验证码保存到文件
* @param path
* @throws IOException
输入输出异常
public void write(String path) throws IOException {
OutputStream sos = new FileOutputStream(path);
this.write(sos);
* 将输出流写入到图像数据缓冲区的图片
* @param sos
* @throws IOException
输入输出异常
public void write(OutputStream sos) throws IOException {
ImageIO.write(buffImg, &png&, sos);
sos.close();
* 获取图像数据缓冲区的图片
* @return 图像数据缓冲区的图片
public BufferedImage getBuffImg() {
return buffI
* 获取验证码字符串
* @return 验证码字符串
public String getCode() {
Index: images/ImgFontByte.java
===================================================================
--- images/ImgFontByte.java (revision 0)
+++ images/ImgFontByte.java (revision 4)
@@ -0,0 +1,955 @@
+package com.first.utils.
+import java.io.ByteArrayInputS
+import java.awt.F
+ * ttf字体文件
+ * @author
+public class ImgFontByte {
* 获取字体
* @param fontHeight
* @return 字体
public Font getFont(int fontHeight) {
Font baseFont = Font.createFont(Font.TRUETYPE_FONT,
new ByteArrayInputStream(hex2byte(getFontByteStr())));
return baseFont.deriveFont(Font.PLAIN, fontHeight);
} catch (Exception e) {
return new Font(&Arial&, Font.PLAIN, fontHeight);
* 对字符串二进制编码
* @param str
* @return 二进制数组
private byte[] hex2byte(String str) {
if (str == null) {
str = str.trim();
int len = str.length();
if (len == 0 || len % 2 == 1) {
byte[] b = new byte[len / 2];
for (int i = 0; i & str.length(); i += 2) {
b[i / 2] = (byte) Integer
.decode(&0x& + str.substring(i, i + 2)).intValue();
} catch (Exception e) {
* ttf字体文件的十六进制字符串
* @return 字体文件的十六进制字符串
private String getFontByteStr() {
StringBuffer sb = new StringBuffer();
sb.append(
&c04f532f327d434cfb000087c&)
.append(&cd61709cbc69ab05ebb32bf7&)
.append(&6d00f6cd46d7806beef5300008&)
.append(&06c24686d&)
.append(&b26efffecc6f6000&)
.append(&b06d9fa927fc&)
.append(&6fea0eacfd8a00&)
.append(&1dece01de&)
.append(&ece0006001&)
.append(&acef025c500&)
.append(&0100000&)
.append(&36bd90000&)
.append(&01dece01dee&)
.append(&ce2000300&)
.append(&5cc038aaa90&)
.append(&00ab004c0ac&)
.append(&03ba2f002f006d&)
.append(&ed002ff006f006de006400&)
.append(&63006b0&)
.append(&ef&)
.append(&d&)
.append(&e006f006f&)
.append(&6c006f006ef006e00730&)
.append(&edd0054004d&)
.append(&f006c002ed&)
.append(&c006c006c002ede002000&)
.append(&69006d0&)
.append(&e006f0020&)
.append(&d&)
.append(&e0003100&)
.append(&2e006fff00&)
.append(&e004abef2f6d656d&)
.append(&2e616f6c2e636f6d2fd666f6e2f202df6e204a&)
.append(&f6ed204d65&)
.append(&206e6ff6cef46&)
.append(&16ed616f6c2e636f6d202d&)
.append(&e56c696d697&)
.append(&f646fffc3a&)
.append(&6f6e204ae6f673a32f416&)
.append(&e4ae005b50072&)
.append(&006f005df006e0065002&)
.append(&d006dc00&)
.append(&6ee000770&)
.append(&d006f0064&)
.append(&f006c0007&)
.append(&cc006900&)
.append(&6200650&)
.append(&06c006fd000a000d000a004e004ff004e006d&)
.append(&006ee006&)
.append(&9006c00&)
.append(&5400200&)
.append(&04e00066&)
.append(&dd000a000&)
.append(&d000ade006fd&)
.append(&5400200&)
.append(&06f006eece&)
.append(&002cf9002&)
.append(&4006800&)
.append(&2e000d000a000d000a0&)
.append(&&)
.append(&f006efe007&)
.append(&fc006f00&)
.append(&6e006f006ffd006f00640&)
.append(&e006ff0068&)
.append(&006ed006f006e006f006&)
.append(&a000d000a&)
.append(&6ef006e0&)
.append(&d006dc40069&)
.append(&006f006e006e0072006&)
.append(&e006f00&)
.append(&6ed00690&)
.append(&06f006e002e000d000a000d000a00074&)
.append(&f006e006f&)
.append(&dc006f00&)
.append(&6fc00680&)
.append(&c&)
.append(&006ff006f006e0064002&)
.append(&d9002000&)
.append(&6df00750&)
.append(&06e002e000d000a000d000a&)
.append(&c006ce4002&)
.append(&d000a000d000af002f00&)
.append(&6df006c002ed002ff006f0&)
.append(&06def002f006c006c002ed&)
.append(&006c000d000a000d000a004dc&)
.append(&a000d000ad&)
.append(&6c006c000d000a00480&)
.append(&e0030000d&)
.append(&000a000d000a006f006&)
.append(&da000d000a&)
.append(&6f00660&)
.append(&f006ef006ef&)
.append(&006b002e000d000a000d000a005b002&)
.append(&ea000d000a&)
.append(&2f002f006df006c002ed0&)
.append(&02ff006f006def002f000d000a&)
.append(&a002f002f006df006c002e&)
.append(&d002fb818&)
.append(&0b001bb003db801b200de0&)
.append(&0f901d55a725a725a725af0e0e0d0d0c0c0b0b0a0a0909&)
.append(&db801ff4&)
.append(&&)
.append(&b001b20&)
.append(&62fc2f3c10fd3c10fd3c012f3cfd3c2f3c&)
.append(&fd3cb861b7b90008ffcf0&)
.append(&177fec7fafa0320fce03f02a000fde01&)
.append(&6a6a406b295d5a3d3a5cf3b3a021b32f3f3d&)
.append(&34a52c4fc762ff2ffd10fd10&)
.append(&fd2ffd3c10fd012ffd3c2f3cfd173c10fd2ffd10fd3c2ffd3c3c2ffd2e2e2e002e2e2e2e3130014&)
.append(&968b861b7b9006affcd&)
.append(&1716033&)
.append(&6071736&)
.append(&fb0cace2620030&)
.append(&ac062baa03090a0c&)
.append(&122a02aa0a3ef0603030&)
.append(&ddb021d19070e1afe66fe5101&)
.append(&db031df373cfe988ecffff6b035&)
.append(&ffffd024feae900ef00f9010201&)
.append(&fdf1f0eae9e7e6e3d3d0cbc9c3bfb8b4afacaaa89b997c6e6a5d5b0241d1&)
.append(&8110efffaf0eceae8e6d5cecbc6c4bdb9b1afaf322a8&)
.append(&903a022d3e0bee553e04f6f54&)
.append(&704d74a4404ded77a9e7efbfdbf3cfd3c10fd2f3c&)
.append(&fd2f3cfd3c10fd10fd012ffd2ffd10fd10fdbfd2f3cfd10fd2e2e2e2e2e2e2e2e2e2e2&)
.append(&e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e&)
.append(&2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2eb90&)
.append(&1b03ffc514&)
.append(&0623223&)
.append(&e&)
.append(&d1726353&)
.append(&e5140623&)
.append(&1615142&)
.append(&e071f3336&)
.append(&d370e040b0&)
.append(&c440a0b010f340a0d2b02a270aa180a08&)
.append(&0fd090baf0b0db3f&)
.append(&aa2d3f471e090f0b110f150ba08&)
.append(&090de0e200b111d431c11c112e1b5607040&)
.append(&82c062be144c020cb140fa&)
.append(&050ed91d0c091d0d17010&)
.append(&d0a0e0f0fa150ef121313&)
.append(&0c130acd1a70e0fa0b0b250&)
.append(&e0f040b0d030fb050a1b030ee010a620f&)
.append(&010e110d0f0b0f17feaffff002ea0ffff0&)
.append(&02ea0ffff002ea0ffffb0344&)
.append(&8ffdc010f004a18001e0&)
.append(&b762ff012f3cfd2ffd2e2e2e2e002e2eb9000b&)
.append(&b7b90031ffc&)
.append(&71e0c914&)
.append(&070c1e283ce15bf1b171e53&)
.append(&a5a090d061b384a0a037efff&)
.append(&f900fd211d120aca46762&)
.append(&ff012ffd2ffd2e2e2e2e002e2eb861b7b900&)
.append(&27ffc73&)
.append(&a7&)
.append(&b981ae970d3a36cda1f483a10d1c00290&)
.append(&02f1f1de271b0e1fa272d&)
.append(&ff10fd2ffd012f3cfd2ffd10fd10fd2e2e2e2e002e2e2e2&)
.append(&eb861b7b90030ffc32227&)
.append(&e1120d0&)
.append(&d260d0a80cba&)
.append(&0bf0fb10030&)
.append(&cebf076e6a625c5b4b4745&)
.append(&443e3b354e1c046a040c&)
.append(&ff2ffd10fd2ffd3c10fd2ffd3c012f3cfd2ffd3c2e2e2e2e2e2e2e2e2e2e&)
.append(&2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e2eb861b&)
.append(&ffc70e3d&)
.append(&71e06271&)
.append(&5172623&)
.append(&d2b3e380a72ca8&)
.append(&c068bf1019&)
.append(&fed71fce21ad&)
.append(&12ca1ad3c0af1c&)
.append(&0d525a0ad641fd4d081deb300000&)
.append(&3ba230ae02&)
.append(&021a3f62ff10fd3c10fd012ffd2ffd2f3cf&)
.append(&d2ffd3c2e2e2e2e2e2e2e002e2eb861b7b90047ffc038&)
.append(&eb0116151&)
.append(&e010b08&)
.append(&d230c061d2d1f232e6a0&)
.append(&23af2d080d0aaa3bb0f040604&)
.append(&95b0e161bcc3ce&)
.append(&f007a511fe432cd2e2d050c04&)
.append(&054b3b4bc2ffd3c3c2ffd2ffd3&)
.append(&c10fd10fd10fd3c10fd3c012ffd2ffd3c2e2e2e002e2e2e2eb861b040&)
.append(&b90050ffc&)
.append(&fb&)
.append(&d350dbc071e0&)
.append(&71c100c440e081e080beaa&)
.append(&d1da5204050&)
.append(&cf200c828&)
.append(&1b020ad0d62ff10fd10fd012&)
.append(&ffd2ffd10fd2e002e2eb861b7b90028ffc&)
.append(&0ef21e0&)
.append(&43aff1a160c150c0b082e261b161de321a030a2b0e171d&)
.append(&1d200c1e291c161a2bdc001b&)
.append(&dc62f3718002f&)
.append(&2f10fdefc0ece2e2e2e002e2e2eb861b040525&)
.append(&33ffc627&)
.append(&d0c0c011b1b1e0e0c0d4&)
.append(&a0c103b1d0a1e1f1a1e0e181d3c0f1f2c1c072c1f02a848&)
.append(&553e230ec0a0f3a5e0fc00&)
.append(&cc645e241ee&)
.append(&e023e1cae762&)
.append(&ff2ffd10fd2ffd10fd012ffd2ffd2ffd2ffd2ffd3c10fd2e2e2e2e2e002e2e2e2e3130&)
.append(&0cb7b90068ffc&)
.append(&7061514&)
.append(&3237362&)
.append(&fca3e54a05bfa3922&)
.append(&f51ad1d010bfc1b&)
.append(&eea0ff746aa57ff1d&)
.append(&624ce54e2b5d1bd70d221d&)
.append(&34b3f52fea3a70f490b6afdf45&)
.append(&e716d645e5c7e6b4f4e0e1&)
.append(&aa85a038e8f0b2f010bf37&)
.append(&fd3c2ffd012ffd2ffd2f3cfd2ffd2ffd2ffd10fd10fd2e2e2e2e2e2e2e2e2e2e002e2&)
.append(&e2e2e2e2e2e2e2e2e2eb861b7b90094ffc&)
.append(&&)
.append(&63d013427&)
.append(&1f06071&)
.append(&60f020f140a&)
.append(&190b043c380edcf0e11082&)
.append(&15d20caa0c04&)
.append(&d364ea1ce0&)
.append(&cb2b90e073bd6f&)
.append(&131cecf4f745e5f0a7abc&)
.append(&e1a2a370de3b043c080f034b&)
.append(&4ab00aec409d009b918c6cb4&)
.append(&30f8e032f056e1c056ec&)
.append(&037b050c3d054b4b043a42c2cff10fd2f173&)
.append(&cfd3c3c10fd10fd2ffd173c10fd2ffd10fd012f3c3cfd2ffd2ffd2ffd2ffd10fd2ffd10fd2e2e2e&)
.append(&2e2e2e002e2e2e2e2e2eb861b7b9009cffc&)
.append(&e013736&)
.append(&2322232&)
.append(&7060714&)
.append(&3f08012&)
.append(&d46feecd02aaf&)
.append(&220ebea0b20ac165d4e373&)
.append(&cb7f1e1e080c020cfe060a&)
.append(&25fb0c320b070e0df012&)
.append(&b171b250a6feef&)
.append(&0f4f620fcee1c2c3b0c&)
.append(&814fef016e01ed0873c80&)
.append(&7c6f5b5aa2d1d3ca3c66670&)
.append(&56d0d055ef2f762ff10fd2ffd2ffd10fd10&)
.append(&fd10fd3c012ffd2ffd2f3cfd10fd10fd10fd2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e313&)
.append(&2db7b90086ffc&)
.append(&1716171&)
.append(&4173332&)
.append(&373e363&)
.append(&534bfd0d0b2c0b0bc262a1e4e0b1a1904&)
.append(&050fa6b527acdd&)
.append(&ae1c5ed0b0c190d&)
.append(&f1f032b1c0d3e90c0b220d51e&)
.append(&c1f796df11bfc1a52f502424&)
.append(&43a0c1d3da2a2fab00400&)
.append(&a908b857c7a715fef635b4a&)
.append(&462d2bd4d4c033df2ac467&)
.append(&62fc3f2ffd10fd10fd012ffd2ffd3c10fd2ffd10fd2e2e2e2e2e2e2e2e2e2e2e2e2e2e&)
.append(&002e2e2e2e2e2e2e2e2e2e2e2e2e2eb861b7b90095ffc&)
.append(&73e3637&)
.append(&f070e262&)
.append(&6333637&)
.append(&3e070e022a300c0a300&)
.append(&bb172f111a07&)
.append(&abebc&)
.append(&b0d1b0c0d0f51ff040bfe8f130d080c07&)
.append(&2e010e1ec6ed1d90a120f25d92&)
.append(&d0c0e0df2f3e0e0b0a11ca02&)
.append(&51e6d190c9c1e0fa0e0c0f050c072cc35c61&)
.append(&b0fc4c040a087c75feb50b160dda0d025103&)
.append(&7c9a7b5f4f443c291f5&)
.append(&34a3c1be7d048e320114&)
.append(&ff2ffd2ffd2ffd10fd2ffd10fd012ffd2ffd10fd3c10fd2e2e2e2e2e2e2&)
.append(&e2e2e2e2e002e2e2e2e2e2e2e2e2e2e2e2e2eb861b7b9&)
.append(&0099ffcee321&)
.append(&e013332&)
.append(&2627262&)
.append(&e333237&)
.append(&e313cad233a600a&)
.append(&c16ae1d264d0a353e52e5524&)
.append(&ca241c3a191a281d06092baf2c09da4d541&)
.append(&c035ad6f0d041ef463e433c4b2415230f&)
.append(&fc1df020ac&)
.append(&f0f100a10f1a4cc0cdb120d0602&)
.append(&a3826feb40a4a08ad1a0f0e0f&)
.append(&ee007f00adf6e6c5ae6f6e58&)
.append(&c1e20a054f041&)
.append(&81a042f311e010a3f3f2ffd10fd2ffd3c2ffd3c10fd&)
.append(&10fd3c10fd10fd012ffd10fd3c3c2ffd2ffd2ffd10fd2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2&)
.append(&e2e2e2e2eb861b7b90080ffc&)
.append(&61d01363&)
.append(&2271633&)
.append(&3237363&)
.append(&592cd3a212b&)
.append(&293f3b151c4c6db91cf234&)
.append(&33ea2d1d&)
.append(&1d0a0c5c2e6d01cc0ed44c590e21021&)
.append(&ed01e21feab4e3d82a1b0517&)
.append(&042bc2cbc6&)
.append(&f6c665ba362fc645e533e3a6&)
.append(&d11f3f2f10fd012ffd872e0ec40efc0ecef&)
.append(&c0ece2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e2e2e2e2eb900&)
.append(&1fb7b90073ffc&)
.append(&&)
.append(&0607060&)
.append(&a1ac53a401920&)
.append(&081d0509060abcae2e380ef0ac4d720dcc0&)
.append(&90af0d0cd407f181826feed680125&)
.append(&a0c0d021a061a0f7e0d0a32&)
.append(&50d30fba151e1a09060a48&)
.append(&2e73e3ae52c2c45fdd600190&)
.append(&ba&)
.append(&73e07061&)
.append(&7060322&)
.append(&3726132&)
.append(&aa690a4e61&)
.append(&2a333be461b0aa5a4d312ed3a3c6b39303&)
.append(&8e1b1b1d462b91a231e130f8f0e161f0533&)
.append(&1e321d801b0f0b2a1ebd3&)
.append(&06a1105071fef11c5e271d0d012f2b323a4bf3d2a0905&)
.append(&6b1f2c9cdefec61fa301f2&)
.append(&b1e231dd063b2715feae3c&)
.append(&d100d0b01ed030a008cba540a&)
.append(&600a6a3a09e03e3cf1e036f&)
.append(&d030ab8e8d058bb&)
.append(&f10fd2ffd3c10fd2ffd3c10fd012ffd2ffd3c3c2f3cfd10fd10fd2ffd2ffd&)
.append(&10fd2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2eb9002700a&)
.append(&b900a5ffcc26&)
.append(&0706070&)
.append(&&)
.append(&3736333&)
.append(&401edd0db0b0b&)
.append(&0cb1d353e2e2cce0a&)
.append(&e0dd16e60bc3029&)
.append(&2a32c1d2d4f0d0ba0d3c0&)
.append(&d100c0b0f0c0e161a09bf0a0e123f3b3a1e0bf132026&)
.append(&0d1c5d4b2db0fb0e460e0b271e321a8c1&)
.append(&b83ca0a&)
.append(&ffff000f2bfffd0165ffff0013f&)
.append(&f5e012bf0007018fffff0018ffdc010fb0000ffff003c&)
.append(&00be021dffff0013fff900fc&)
.append(&8d4e019a9a409b5b554f49&)
.append(&0c8e8a4d6ad3c&)
.append(&d2ff2ffd10fd2f3cfd2ffd&)
.append(&012ffd2ffd2ffd2ffd10fd10fd3c10fd3c2ffd3c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e002e2e2e2&)
.append(&e2e2e2e2e2e2eb861b7b9009affc60714&)
.append(&2227262&)
.append(&73e2526&)
.append(&2635343&)
.append(&1da04421c&)
.append(&0e041e1cbc3a&)
.append(&f050ea17fefbc751a62f2b366905&)
.append(&271ae0aa04412&)
.append(&a1c0dd252c0cf0a280b1e40e0a0b8d400e10&)
.append(&2e112048fddf1aaee5b1d0&)
.append(&42b0a040f681d5c3338fdeb1e1d37900c&)
.append(&0ffff002ea502a&)
.append(&bb4f4e410f928d&)
.append(&4c4c050a7d051b3f3f1&)
.append(&0fd2ffd10fd012ffd2f3cfd10fd872e0ec40efc0ec40ece2e2e2e2e2e2e2e2e002e2e2e&)
.append(&2e2e2e2e2e2e2e2e2eb861b7b90094ffc&)
.append(&3363736&)
.append(&e3332373&)
.append(&e&)
.append(&1a331c460&)
.append(&70bbd0d034b0d170e40f1d&)
.append(&161eece1c841df130e0d0&)
.append(&b0a04ffe1b2f2aa470df200310&)
.append(&e0d0a520db013&)
.append(&d1b1c40d150fbbf&)
.append(&1a0e0e3c700e1b194ff220fd0c0&)
.append(&41efee002dc&)
.append(&00a800b&)
.append(&e&)
.append(&2e33321&)
.append(&73ee373e&)
.append(&b&)
.append(&ba071b1f437f0d16291c0a&)
.append(&191bc0fc80f2abde2&)
.append(&a080b0f3b1b145bc0d16&)
.append(&0f0a040c0b1f120d0adce22082aac510a322f070c8e53520&)
.append(&d11c3ed325e&)
.append(&a0a0f361e040bafe5f0f0b0e0e241e0f01ffb0d9&)
.append(&90bfeb41f42b2d6403112c&)
.append(&25fe890e6a041ca2b9006&)
.append(&de6e406f004c463f3aa463d3b3ac025357&)
.append(&50f3f3c2f10fd3c2ffd3c10fd012ffd2&)
.append(&ffd2ffd2ffd2ffd2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2eb861b040&)
.append(&b9006effc70e&)
.append(&e061514&)
.append(&1716333&)
.append(&9bbd422c1c0e1a1f0a0b47&)
.append(&ea1bcdaa07226&)
.append(&f1a0f30c2b63e0b2b6160d17&)
.append(&0b2f044d0c1c01df&)
.append(&21b2b54feee1a1a552e450b142e1b180d0cb&)
.append(&000dacb564a3c206b604e3&)
.append(&c100e0e101ac5ba010a3f&)
.append(&3f2ffd10fd012ffd3c10fd2ffd872e0ec40efc0ece2e2e2e2e002e2e2e2e2e2e2e2e313&)
.append(&0ab7b90070ffc&)
.append(&3736032&)
.append(&7160735&)
.append(&e2e3f7a9b1cb&)
.append(&22c624a4b030c0d030ae270e3fcb03e2a11&)
.append(&0b0d234b6d1dc010c0f0cd420d113e0d2e&)
.append(&62a233d2f17f4e423b2d&)
.append(&6e61dc321a5137fea30a0b7a0b1506dc1&)
.append(&c2ac1f3df3f0a0225031b&)
.append(&de7e407f007d3b3a524e3&)
.append(&fff10fd3c012ffd2ffd2e2e2e2e2e2e2e2e&)
.append(&2e2e002e2e2e2e2e2e2e2e2e2e2e2e2eb861b7b9007ef&)
.append(&fce0607&)
.append(&070ee222&)
.append(&7262706&)
.append(&2506070afe1d150e0e020b091d0e1a013f1d130b081&)
.append(&da09a4&)
.append(&0a1905fee51b7788efeaf0c0d080b130&)
.append(&50d11090fba0d1c3fd4b140f120d221114&)
.append(&d0c018a264&)
.append(&c081b354b291fc360c6c6bb3a&)
.append(&001b002f003ad007bc7c407de5b4a49473&)
.append(&f3b34cc3b051e2be280101&)
.append(&fd10fd10fd012ffd2ffd3c2ffd10fd2e2e2e2e2e2e2e2e2e2e002e2e2e2&)
.append(&e2e2e2e2e2e2e2e2e2eb861b7b9007cffc&)
.append(&3332163&)
.append(&6230306&)
.append(&1617363&)
.append(&a35b50f090d0b0f0f61b&)
.append(&a1e1b0ebcd7b140&)
.append(&e390e080e2f010207fedab010a&)
.append(&080e3cb522c1a033bf0a040&)
.append(&5080145fefa060e139f00b0a0dfdbb030ee9&)
.append(&12fede1c31aae02ea003f&)
.append(&eaa040a08f574dff2&)
.append(&3f002b026e06b3d3b2d046b7d041f870&)
.append(&ffd2ffd2ffd2f3cfd10fd2f3cfd10fd10fd10fd012ffd2ffd3c&)
.append(&2ffd2f3cfd3c2ffd2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2eb6&)
.append(&861b7b900a0ffcee0135&)
.append(&140f161&)
.append(&7060716&)
.append(&3736373&)
.append(&2aee090abe1707&)
.append(&0f43b0b1b010e2a2b181f4&)
.append(&052e8181e&)
.append(&130d0b040e3d050a490ef2&)
.append(&f182cf18&)
.append(&a0e40f6fecd1f070b705010&)
.append(&b0df091107&)
.append(&0dbb0ac02aa02dd003f08f8&)
.append(&77c34bb857a80ea&)
.append(&2f2f10fd012ffd2ffd2ffd2ffd10fd2e2e2e2e2e2e2e2e2e2e002e2&)
.append(&e2e2e2e2e2e2e2e2e2e2e2e2e2eb861b7b90091ffc038&)
.append(&3f01263&)
.append(&e&)
.append(&3637363&)
.append(&0cf071c1511&)
.append(&3fe0ea1ca0e19155&)
.append(&bf0cfecd0b170b011f2a45&)
.append(&0e0aac0ebfec7083&)
.append(&901e819feb61b2ea0c151a083b5ee120401&)
.append(&70d4b440b0b0d534d1f0eac51&)
.append(&76e040fbae202010&)
.append(&4d86c80ae130f10ac3a006cd009c40410&)
.append(&18e8e408f008cbc736da2c261a0e0a0c0e06&)
.append(&c3b762ff012ffd2ffd3c872&)
.append(&e0ec40efc0ecefc0ece2e2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e&)
.append(&2e2e2e2e2e2e2e2eb861b7b9008effc60&)
.append(&6070e01&)
.append(&171e070&)
.append(&3262726&)
.append(&b0aa0a0c413&)
.append(&da040d100df040ecc&)
.append(&0e0c3c7b07be060a1cf80f10&)
.append(&70b1a1ce150bff&)
.append(&0c3f584d4c010c0aaf130aa010a&)
.append(&ea011d1b080403&)
.append(&080ddf0e5702fed43a626c2eca302b90e4&)
.append(&ef001d003aaf4e4a&)
.append(&b064a494a4b062c4a4bb030&)
.append(&beff2f3cfd10fd012ffd2ffd2ffd&)
.append(&2ffd3c10fd872e0ec408fc0ecefc08ce2e2e2e2e2e2e2e002e2e2e2e2e2e2&)
.append(&e2e2e2e2eb861b7b90074ffc&)
.append(&343e072e&)
.append(&72e2322&)
.append(&e261d1c3d3e&)
.append(&97a1e173e113bf1fda1931&)
.append(&0ac142a0d16fea1f241e493d292ed3ab18141&)
.append(&c0d2c1a133d2fa186e4e384cb18&)
.append(&0aafe7f1dfc100a0af1c2c175&)
.append(&a3b211d1d0ed0c&)
.append(&fd002b007ff5c503f3b1e1c&)
.append(&ccff10fd10fd01&)
.append(&2ffd10fd10fd10fd2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e2e2eb9001&)
.append(&b7b90075ffc40e023534&)
.append(&3e2e012&)
.append(&e&)
.append(&ec1b130d67f0b850e03151&)
.append(&c0e0eb370dd2f977&)
.append(&ad0508053cca1ab0&)
.append(&c086fbb0d4b241e1e5d1b0ca024fc223a51adb90c0c212c16&)
.append(&2ce0e0bb081e7e2ae&)
.append(&90c0bae182be02ad030200&)
.append(&5ef5fa3f382c281f2d2c4&)
.append(&f3cfd012e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e31&)
.append(&b7b9005fffc&)
.append(&71e2726&)
.append(&1716173&)
.append(&a201a0f0ce420de3c131f1c06&)
.append(&0d0d09feda0dcc2aab&)
.append(&90f61adbf4f1c4a010f0a4e&)
.append(&a7bc2c1d086b233a2f5e8&)
.append(&d458b120dedceb91&)
.append(&403f01a1a140a23b9b6c110b079b8d837d765e4a423b201e0706048&)
.append(&14c762ff10fd2ffd10fd3c&)
.append(&10fd012ffd2ffd2e2e2e2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e3&)
.append(&01e00ab900a1ffc7062322&)
.append(&2e2e171&)
.append(&e7060706&)
.append(&0607060&)
.append(&25f0519&)
.append(&50b0b0ecb30c2&)
.append(&20abd4b150d0f20d&)
.append(&140f0a121a3b1ed70b1&)
.append(&81da30b020abd240c0e1d070d0f1bbd1410&)
.append(&103f7f0a0b0a1c53fccd&)
.append(&12e0acfd196ba60b035c3a3a05&)
.append(&a10ec0a585c2e5ba&)
.append(&d1bfbd027e600a&)
.append(&b837e3e2a268d847f7e7c6a5d5c4d423ef1d1d1f91930&)
.append(&61f1d1d1f023b0cff2ffd2f&)
.append(&fd10fd3c012ffd3c2f3cfd872e0ec40efc0ecefc0ece2e2e2e2e2e2e2e2e2&)
.append(&e2e002e2e2e2e2e2e2e2e2e2e2e2e2eb861b7b90097ff&)
.append(&c534363&)
.append(&6270607&)
.append(&3534333&)
.append(&27e0311&)
.append(&1ec0b103f0f150ccc&)
.append(&f140d352f1af0c090a06db1cad1111482d&)
.append(&0ab0f0d472adbe67211b1bec0f01090f0&)
.append(&cc17a93f292a478ec&)
.append(&1c2b1c1c2d0d1e150d0c0bedb2ffe0ac4&)
.append(&40d07412a2baed240ecf52abce2d09bf08314c&)
.append(&3c3b160d370cf004c005b0&)
.append(&06d756ec024d3e030f0e1fc&)
.append(&62ff2ffd10fd2ffd10fd3c012ffd3c2ffd2&)
.append(&ffd2f3cfd2ffd2e2e2e2e002e2e2eb861b7b90078ffc0&)
.append(&2623220&)
.append(&e&)
.append(&171e221&)
.append(&42d4b94e3e301f181ff7f&)
.append(&efedb040b0a0a100a192f461&)
.append(&c0f3c200c263ff022a0afa33&)
.append(&1b5cd3f2b352c4aaa670d1a563a1a164&)
.append(&b0f30a3b4c840c50e4f133e4a&)
.append(&201c1a004c007e008d4&)
.append(&03f017f7fd665a4f3b2d266b514ddd5b66&)
.append(&b3f3f2ffd2ffd10fd10f&)
.append(&d012ffd2ffd3c2f3cfd2ffd2f3cfd10fd2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e&)
.append(&b861b7b9007fffc7060&)
.append(&7262322&)
.append(&3e34263&)
.append(&72e0513&)
.append(&0d320bc54cb341e4a&)
.append(&d9f492cfaf10d548e3a72f641a&)
.append(&090b0cd01f71d19101c0&)
.append(&10cfb083a43fe170ff2c26120d18fef4fea30c&)
.append(&0a0814137efefd1e3c0&)
.append(&a1e021bfdb84056&)
.append(&18d8b7a13ed415&)
.append(&50e132a021b667ee045c&)
.append(&3f3f2ffd2ffd10fd2ffd2ffd10fd012ffd3c2ffd2ffd10fd10fd10f&)
.append(&d10fd872e08c40efc0ece2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e313001&)
.append(&b90092ffc&)
.append(&4171633&)
.append(&f0623222&)
.append(&e&)
.append(&020be0fd1a1f7e4539100&)
.append(&60efee02801&)
.append(&51c111b0e0a1b254cd032c171d381e080&)
.append(&40a080b140a31b6c0ee02cc7c6e1f060c31&)
.append(&1ab0a1b2dea0&)
.append(&e0facd030a24a70f0d251ba1a&)
.append(&1f3e192d384d0bdfff701f&)
.append(&0bd409ed0250&)
.append(&6aa8c8a029ac3c042c4ac0&)
.append(&c030dfc3f3f3f2f3cfd10fd10fd2ffd10fd10fd012ffd3c&)
.append(&2ffd2ffd2ffd173c10fd2ffd10fd10fd2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e&)
.append(&8b861b7b9009dffc726&)
.append(&e3427262&)
.append(&6272635&)
.append(&0726230&)
.append(&f013eb0e211c1f250d03011d&)
.append(&0a2af152c282a0b051abec0&)
.append(&b041c030fe3ba022ac&)
.append(&00b180f23&)
.append(&1af50a1b0ac012f&)
.append(&b0fe738a0d&)
.append(&73afe9ec090f030b1db131b6e1c01030e&)
.append(&cc101aea6403b0&)
.append(&17e7e407fb2e3c3b0e2b0eaf&)
.append(&e3f2f2f3cfd2ffd10fd10fd2ffd012ff&)
.append(&d2ffd3c2ffd2ffd10fd2e2e2e2e2e2e2e2e002e2e2e2e2e2e2eb861b0&)
.append(&b9007effc&)
.append(&e&)
.append(&2706071&)
.append(&ecc3d0c7a340d&)
.append(&b3aa62e2c343c130f2bb&)
.append(&c5e2e331c3aff535d3da&)
.append(&100c0d131a0d183bf0d0ed286&)
.append(&ef0f01fece4f2e181d230f222d3f16390d&)
.append(&e2c201fa5a940c&)
.append(&ab756e6ab05d55&)
.append(&4a491f1ee1e1f797b061f1e1e1fb1a0126467&)
.append(&62ff10fd2ffd3c012ffd3c2ffd872e0ec40efc0ecefc0ece2e2e&)
.append(&2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2eb861b7b90&)
.append(&081ffc7&)
.append(&&)
.append(&7363736&)
.append(&080be0a0be0&)
.append(&c132b1d1de270d4ca0a1db7e&)
.append(&a2d0c1c052e6b18fdda0fb0&)
.append(&b011a0f1f0f1c0c1b140e&)
.append(&0e0e1a0c1dfa050a1e160&)
.append(&e907a1e30e0e54d7d0aa12&)
.append(&231fbdfad0a1bb02f05a0&)
.append(&e2e1c0a0a2ff10fd2ffd01&)
.append(&2ffd2ffd2e2e2e2e002e2e2e2e2eb861b7b90059ffc03&)
.append(&5163332&)
.append(&1417161&)
.append(&2bb2e0c0c0ffa4e0c05211c1d&)
.append(&1e1e407d0a0aa61e2b211a0&)
.append(&b191bbff327c0dc&)
.append(&1e37a74e233a7a204c43&)
.append(&f554d0065&)
.append(&2f5fa004e4fb4f045f5e221f011c010c0&)
.append(&ff3f3c2f3cfd3c10fd012ffd872e0ec40efc0ece2e2e2e2e2e00&)
.append(&2e2e2e2e2e2e2e2eb861b7b90068ffc60&)
.append(&72e0615&)
.append(&3336173&)
.append(&b011ea352a5b1b1a2b2405&)
.append(&130a270a0b2e0cc1d040a&)
.append(&f1ff6a152b20ff000a015b172e0b181e061f060c25023c&)
.append(&509c2f2fff0f0a231d071b072f483c3b5&)
.append(&32b473b0b0a2a2a3a302fba2d5a51a62a&)
.append(&1e090f162a3fc6561575&)
.append(&de005b5d061e1c1c1e7b040af79780a3a&)
.append(&62fc2f2f3cfd3c2ffd2ffd2ffd10fdefc0ece2e2&)
.append(&e2e2e2e2e002e2e2e2e2e2e2e2e2e2eb861b7b90087ff&)
.append(&c3321f0&)
.append(&11e1e27&)
.append(&3736373&)
.append(&b097c2b274f&)
.append(&141adbeb0a0d0f050d191e0a040&)
.append(&ba050cea1c1b0ce&)
.append(&190a0b170c0d0c2d093f0af070ab02adc429594&)
.append(&61cd5c1a61c30d0912050f&)
.append(&63c060b5d5b43e3e732db&)
.append(&7fe170b180d011c0e0b0e040c111df100&)
.append(&2da6c6bf3b&)
.append(&23f2e085aef&)
.append(&fd2ffd012ffd3c2ffd2ffd10fd3c2e2e2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2e2e2e2&)
.append(&e2eb861b7b90070ffc406&)
.append(&343e262&)
.append(&e&)
.append(&d61a7d150c9d5&)
.append(&d1e1f0e940b010d2d2a070a8819d&)
.append(&2e064d2e2f507cbcfe162d300b26262bfede&)
.append(&32f2f2c4b135ca3a1ae4de0ad581e&)
.append(&563b2b0b2c2f73f251bb4aaa89d3afea809163&)
.append(&aee623b37&)
.append(&332aa2a2c3d3fd&)
.append(&c100d0afc3c3f3f2f173cfd3c012ffd2ffd10fd2ffd872e&)
.append(&0ec40efc0ecefc0ece2e2e2e002e2e2e2e2eb86&)
.append(&1b7b90066ffce5343635&)
.append(&371e171&)
.append(&e3feb01fe&)
.append(&30c300ab1b0a041d080c100d0c&)
.append(&a424f0e0c50a9e231f9c0a2509&)
.append(&081ceb134de40f1&)
.append(&e1dcdda2a687b841a381ee0601&)
.append(&120fdfdb38017&)
.append(&a695c564a3ba544c32a60c05&)
.append(&3f461f762ff2f3cfd2ffd2ffdefc0ec4012&)
.append(&e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e002e2e2e2e2e2e2e2e2eb861&)
.append(&b7b90072ffc&)
.append(&e&)
.append(&0607161&)
.append(&3f3b1a102fbb0549331c&)
.append(&d010ae0c0df040b10215e5&)
.append(&22bd4e0b0c1f050fbe3d15293b5dba&)
.append(&1ca90b0feb0f019c&)
.append(&18ed04fe651a2a100f0a0b1ac501b0619&)
.append(&d5e0f6a0f0eb00ffff0018ffdc010fb0000000&)
.append(&c02ec001eab403c332a1f0d&)
.append(&010d2f2f10fd012e2e2e2e2e2e002e2e2e2eb861b0405&)
.append(&03bffc7&)
.append(&0e270f2&)
.append(&eb1c0ba1a210c0f200e&)
.append(&040d4abf0aa48d0c0e1e4c4b503c1e&)
.append(&27a0c0d1b2d5987fefb09ffff0013fff900fc0000ffff&)
.append(&002ea0ffff003aefffdffb0013&)
.append(&f004cad2ec03&)
.append(&0a041aa2ff2f2ffd3c10fd1&)
.append(&0fd3c012ffd2ffd3c2f173cfd3c10fd2e2e2e2e2e2e002e2e2eb861b0&)
.append(&b90058ffcf&)
.append(&6171617&)
.append(&0b080dc010&)
.append(&22fbd040b0b060b0d1f3fe0840&)
.append(&0cf28312c3&)
.append(&aefb8c120a3c040d&)
.append(&0bffffa40000ffff001effff0&)
.append(&2f0ffff000b000f023f0000ffff5031b&)
.append(&ffff001bffff001eea0fff&)
.append(&faa02dd0ffff000d0ffff000f001d027703&)
.append(&00ffff02fd0ffff002d001e02adf0000f&)
.append(&fff000c001bffffe0000ffff000c002f0212&)
.append(&030dffff0000ffffb000&)
.append(&0ffff0001fff701f50000ffffea0000ffff&)
.append(&370000ffffbb02f0ffff000cf&)
.append(&000fffff802fb0ffffd902f0ffff&)
.append(&ffffcd0000ffff0018ffdc010f&)
.append(&b0000ffff002bdcffff0013fff900fc0000ffff002e00&)
.append(&1d0012fffca900b200c20&)
.append(&0cc00db00e300e600ed01ab01bf01d501df01e501e901f201fe020a6&)
.append(&3736373&)
.append(&3323632&)
.append(&26233c0&)
.append(&&)
.append(&3637161&)
.append(&e&)
.append(&e32373e0&)
.append(&e&)
.append(&062b013&)
.append(&&)
.append(&ef2226232&)
.append(&6171335&)
.append(&3637362&)
.append(&3220732&)
.append(&f032a2b0e0a1e382b1d5b981e4f040e0&)
.append(&b2fa3daa4532&)
.append(&050ebf030b&)
.append(&50a0b0dea010bc040e0a0d07bf0601010d&)
.append(&7f9ff030b0b01520b05feb&)
.append(&a050fc610271b&)
.append(&190dc0c020d111cc040a080&)
.append(&23fea032f32d223f&)
.append(&0f2f60a031a0fbb&)
.append(&dff1c060eb04&)
.append(&230f32d041d32ea068f030d070e6ca0e040d&)
.append(&40a07010c0dfe200bcf0da&)
.append(&f2a1b1cae1bc60545&)
.append(&c2b4a252f6f80e03e202c4f&)
.append(&c060c0eab160d0&)
.append(&ce20b070bb2a0b0f&)
.append(&20ed051ffb05feea&)
.append(&c210b20ffc140211&)
.append(&0d0b020d0c0a091fa402a0f&)
.append(&e191f1a220dbd191aafe1c1a&)
.append(&0fb2c1bb0ba20&)
.append(&901c91d0ab0708fee1030b&)
.append(&f50f02feba040e032c060e14ffffd801ec0007000dfff&)
.append(&7ff08ffff430000ffffba0000ffff0013ff&)
.append(&5c012ba0000fdc1ffff430000ffff5e03540&)
.append(&d0000ffff0137fff7ffff&)
.append(&e200cfb01f0fffd007c000&)
.append(&caa0067c00&)
.append(&000aec0d010e&)
.append(&dc01e6e249e&)
.append(&da2d000310&)
.append(&003bce0f&)
.append(&c004af8000005&)
.append(&c2c05c4c05dce00005dde00005dee0000&)
.append(&5dfe05e1e05e3e05e5e05e7e&)
.append(&05e9e00005eae00005ebe00005ece00005ede00005eee00005efe05f1e&)
.append(&005f3e05f5e05f7e05f9e00005fae65aa0&)
.append(&0ca3fd0000&)
.append(&033dea001&)
.append(&300f600&)
.append(&0c010b000f&)
.append(&03c011abee000b001b02df&)
.append(&001e02cd2dc&)
.append(&eb0f7c000601&)
.append(&3abee000b0&)
.append(&01b02df001e02cd2d60008&)
.append(&023d000ceb0f1&)
.append(&c017c002b011aef5014800&)
.append(&ff7b00000&)
.append(&b&)
.append(&000c000d000e000fb001c001d001e001&)
.append(&fb002c002d002e002f00&)
.append(&3c003d003e003f00460&)
.append(&04a004b004c004d004e004f0059005a&)
.append(&005b005c005d005e005fb700cb500ab0d6&)
.append(&004cc001c04cc000604&)
.append(&b000000&)
.append(&0050006&)
.append(&000a000b000c000d000e000f0019001&)
.append(&a001b001c001d001e001fb002c002d00&)
.append(&2e002fb003c003d003e003f&)
.append(&a004b004c004d004e004f&)
.append(&b005c005d005e005f000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0000000&)
.append(&0680069&)
.append(&aa700b6fff&)
.append(&fa700b6ffffca00ca00ca00&)
.append(&ca00d4ffffb000c000d000e000f00130&)
.append(&01a001b001c001d001e001f&)
.append(&a002b002c002d002e002f&)
.append(&b003c003d003e003fb004c004d004e00&)
.append(&4fb005c005d005e005f0&)
.append(&a&)
.append(&0025ffdcff0&)
.append(&5050607&)
.append(&0603030&)
.append(&6060506&)
.append(&0606030&)
.append(&2030303&)
.append(&000b030&)
.append(&6040806&)
.append(&0800000&)
.append(&00c0a708&)
.append(&a0809080&)
.append(&b07000b0b&)
.append(&08080a0&)
.append(&b090a090a0a&)
.append(&a090a0a0b080ac&)
.append(&&)
.append(&a0a0a0b0ba0a0&)
.append(&a0b0b0c090bda&)
.append(&090ab0b090a0a0b0c0aa0&)
.append(&b0a0c0b0a0a0ab0b090a0a0b0c0aa0b0a0c0b0a0a0406&)
.append(&c000d0d050a&)
.append(&90abc0b0a0b0b0b0d0bb0c0b0d0c0a0a05&)
.append(&bc0b0a0b0b0b0d0bb0c0b0d0c0a0a06050&)
.append(&c000e0e050b0a0a0a0a0a0a0a0a0a0a0905&)
.append(&a0c0a0a0a0a0b0c0c0a0b0b0c0e0b0a0ad0c0d0d0b0ba060c0&)
.append(&a0a0a0a0b0c0c0a0b0b0c0e0b0a0ad0c0d0d0b0beb0b0d0000&)
.append(&f0f050b0a0a0a0a0ab090a0b0a0b0a090a0&)
.append(&c0b0a0b0b0c0d0d0b0c0c0d0f0c0a0a0ac0e0e0c0ba060c0b0a0b0b0c0d0d&)
.append(&0b0c0c0d0f0c0a0a0ac0e0e0c0bfb0b0ea00101&)
.append(&b0b0b0bc0a0b0c0b0b0b0aa0b0d0b0b0b0b0c0e&)
.append(&0d0c0c0c0e100d0b0b0b0a0a0d0e0d0f0e0c0cb070d0b0b0b0b0c0e0d0c0c0c0e100d0&)
.append(&b0b0b0a0a0d0e0d0f0e0c0cc0c0fac0c0c0c&)
.append(&0cd0a0c0c0b0c0b0aa0c0e0c0c0c0c0d0f0e0c0d0d0e100&)
.append(&d0b0b0b0a0a0e0f0e100f0d0dc070e0c0c0c0c0d0f0e0c0d0d0e100d0b0b0b0a0a0e0f&)
.append(&0e100f0d0dd0d0fbc0c0c0c0&)
.append(&cd0b0c0d0c0c0c0bb0c0f0c0c0c0c0d0f0f0d0e0e0f110e0c0c0c0b0b0e&)
.append(&100ef0c0c0c0c0d0f0f0d0e0e0f110e0c0c0c0b0b0e100e&)
.append(&d0bd0d0d0d0de0b&)
.append(&0d0e0c0d0c0bb0d0f0d0d0d0d0eec0c0b0b0f100f&)
.append(&d080f0d0d0d0d0eec0c0b0b0f100f7&)
.append(&cd0d0d0d0de0c0d0e0d0d0d0c0&)
.append(&c0d100d0d0e0e0ffd0d0c0cf0fd0810&)
.append(&0d0d0e0e0ffd0d0c0cf0ff0f12000&)
.append(&e0e0e0e0ef0c0e0f0e0e0e0dc0e&)
.append(&110e0e0e0e0fd0d0df0fee0e0f121&)
.append(&10fe0e0d0d0df0ff0f029c01&)
.append(&bc028abc028a&)
.append(&355ff5ca0&)
.append(&033d02fdd6f6e204a202&)
.append(&0ffffffff37fffffe0000fae7a6eb5f0f3cf5000003&)
.append(&e50ddac0&)
.append(&000d006bb&)
.append(&30003&);
return sb.toString();
Index: FormatUtil.java
===================================================================
--- FormatUtil.java (revision 0)
+++ FormatUtil.java (revision 4)
@@ -0,0 +1,20 @@
+package com.first.
+import java.text.DecimalF
+ * 格式化工具
+ * @author Xiao
+public class FormatUtil {
* 保留两位小数
* @param d double类型
* @return 返回格式化过后的数据
public static String
convert2Decimal(double d){
return new DecimalFormat(&#0.00&).format(d);
Index: FilePath.java
===================================================================
--- FilePath.java (revision 0)
+++ FilePath.java (revision 4)
@@ -0,0 +1,48 @@
+package com.first.
+import com.dgg.rockframework.util.DateU
+ * 文件路径类
+ * @author lixiaofeng
+public class FilePath {
public static final String POINT = &.&;
* 路径分割线
public static final String SPT = &/&;
* 企业风采图片保存地址
public static final String ENTERPRISE_IMAGE_PATH = &upload& + SPT + &epimage& + SPT
+ DateUtil.nowStrByFormat(&yyyyMM&);
* 企业LOGO图片保存地址
public static final String ENTERPRISE_LOGO_PATH = &upload& + SPT + &logoimage& + SPT
+ DateUtil.nowStrByFormat(&yyyyMM&);
* 企业证照认证
营业执照保存地址
public static final String LICENSE_IMAGE_PATH = &upload& + SPT + &license& + SPT
+ DateUtil.nowStrByFormat(&yyyyMM&);
* 企业证照认证 组织机构代码保存地址
public static final String CPCODE_IMAGE_PATH = &upload& + SPT + &cpcode& + SPT + DateUtil.nowStrByFormat(&yyyyMM&);
* 企业证照认证 税务登记图片保存地址
public static final String TAXCERTI_IMAGE_PATH = &upload& + SPT + &taxcerti& + SPT
+ DateUtil.nowStrByFormat(&yyyyMM&);
Index: NumberGenerator.java
===================================================================
--- NumberGenerator.java (revision 0)
+++ NumberGenerator.java (revision 4)
@@ -0,0 +1,49 @@
+package com.first.
+import java.util.HashM
+import java.util.M
+import com.dgg.rockframework.util.DateU
+ * 编号生成器
+ * @author
+public class NumberGenerator {
* 年月日的格式
private static final String YMD = &yyyyMMdd&;
* 用于存在随机数的的集合
private static Map&Class&?&, Long& recorder = new HashMap&Class&?&, Long&();
* 生成编号,规则如下:&br /&
* 如果目前没有编号,那么使用当前系统+0,如&br /&
* 若已经存在编号,则在以前的基础上进行自加。
* @param clazz
编号被用在哪个类的
* @return 编号
public static String generate(Class&?& clazz) {
String ymd = DateUtil.nowStrByFormat(YMD);
Long number = recorder.get(clazz);
//确定编号是否存在,并且是不是在今天,如果不在,那么进行新建
if (number != null && number.toString().substring(0, 8).equals(ymd)) {
number = Long.parseLong(ymd + &0&);
recorder.put(clazz, number);
return number.toString();
Index: NotConvert.java
===================================================================
--- NotConvert.java (revision 0)
+++ NotConvert.java (revision 4)
@@ -0,0 +1,16 @@
+package com.first.
+import java.lang.annotation.ElementT
+import java.lang.annotation.R
+import java.lang.annotation.RetentionP
+import java.lang.annotation.T
+ * 用于标记实体属性,不做转换用
+ * @author Administrator
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface NotConvert {
\ No newline at end of file
Index: BeanUtil.java
===================================================================
--- BeanUtil.java (revision 0)
+++ BeanUtil.java (revision 4)
@@ -0,0 +1,103 @@
+package com.first.
+import java.lang.reflect.F
+import java.util.A
+import java.util.D
+import java.util.HashS
+import java.util.S
+import com.dgg.rockframework.util.DateU
+import com.dgg.rockframework.util.annonation.Convert2D
+import com.dgg.rockframework.util.annonation.Convert2E
+ * 用于操作各种java类的工具方法
+ * @author
+public class BeanUtil {
* 将vo对象转换成domain对象,仅仅转换基本类型;复杂类型,需要人工重写后进行转换&br&
* 要求vo与domain的属性名称一致时,类型必须一致,否则就会出错。
* @param src
* @param target
entity,new一个,在modify时,应该传入find的对象。
* @param &T&
* @return 转换成功的对象
public static &T& T convert(Object src, T target) {
if (src == null || target == null) {
throw new NullPointerException(&vo与entity均不能为空&);
for (Field vof : getAllFields(new HashSet&Field&(), src.getClass())) {
for (Field ef : getAllFields(new HashSet&Field&(), target.getClass())) {
if (vof.getName().equals(ef.getName())) {
if (!vof.getClass().equals(ef.getClass())) {
throw new IllegalArgumentException(&vo与entity的属性名称相同,类型不同!&);
vof.setAccessible(true);
ef.setAccessible(true);
// 如果添加了标记为 转换成date的注解,那么就进行转换
if (vof.isAnnotationPresent(Convert2Date.class)) {
// 获取注解的值
String format = vof.getAnnotation(Convert2Date.class).format();
Date date = DateUtil.strToDate((String) vof.get(src), format);
ef.set(target, date);
if (vof.isAnnotationPresent(Convert2Entity.class) && vof.get(src) != null) {
Class&?& entityClazz = vof.getAnnotation(Convert2Entity.class).entityClass();
// 判断该属性是否为long
if (!vof.getType().equals(Long.class)) {
throw new IllegalAccessException(& '& + vof.getName() + &' field type must be Long!&);
Object object = entityClazz.newInstance();
// 获取id属性
for (Field field : getAllFields(new HashSet&Field&(), entityClazz)) {
if (field.getName().equals(&id&)) {
field.setAccessible(true);
field.set(object, vof.get(src));
ef.set(target, object);
}else if (!vof.isAnnotationPresent(NotConvert.class)){
ef.set(target, vof.get(src));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
* 获取该类所有的属性
* @param fields
属性的集合
* @param clazz
* @param &T&
* @return 属性的集合
public static &T& Set&Field& getAllFields(Set&Field& fields, Class&T& clazz) {
fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
Class&?& superClazz = clazz.getSuperclass();
if (superClazz != null) {
fields.addAll(getAllFields(fields, clazz.getSuperclass()));
Index: ConcatUtil.java
===================================================================
--- ConcatUtil.java (revision 0)
+++ ConcatUtil.java (revision 4)
@@ -0,0 +1,38 @@
+package com.first.
+import java.util.A
+ * 链接的工具类
+ * @author
+public class ConcatUtil {
* 合并多个数组
* @param first
第一个数组
* @param rest
需要叠加的数组
* @param &T&
* @return 转换成功的数组
public static &T& T[] concatAll(T[] first, T[]... rest) {
int totalLength = first.
for (T[] array : rest) {
totalLength += array.
T[] result = Arrays.copyOf(first, totalLength);
int offset = first.
for (T[] array : rest) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.
Index: ExcelPoi.java
===================================================================
--- ExcelPoi.java (revision 0)
+++ ExcelPoi.java (revision 4)
@@ -0,0 +1,128 @@
+package com.first.
+import java.io.FileInputS
+import java.io.FileNotFoundE
+import java.io.IOE
+import java.io.InputS
+import java.math.BigD
+import java.text.DateF
+import java.text.DecimalF
+import java.text.SimpleDateF
+import java.util.ArrayL
+import java.util.E
+import java.util.I
+import java.util.LinkedHashM
+import java.util.L
+import java.util.M
+import java.util.P
+import java.util.S
+import org.apache.poi.hssf.usermodel.HSSFDateU
+import org.apache.poi.hssf.usermodel.HSSFW
+import org.apache.poi.ss.usermodel.C
+import org.apache.poi.ss.usermodel.R
+import org.apache.poi.ss.usermodel.S
+import org.apache.poi.ss.usermodel.W
+import org.apache.poi.xssf.usermodel.XSSFW
+ * Excel解析类,包含Excel的、2010三个版本&p&
+ * 调用类中的readExcel方法将excel中数据读出并拼接为JSON格式的字符串。&p&
+ * @author GuoXueliang
+public class ExcelPoi {
* 解析excel,以集合list的形式返回表格中数据。&p&
* 表格中第一行应为标题,没有存储在list。表格中除第一行为标题外其他每行都是一个实体对象存放在list中。&p&
* properties文件中key要要实体类的属性名称相同,value值与表格中的标题名称相同。
* @param filePath Excel文件路径,包含名称名称
* @param configPath 实体配置文件路径。该配置文件为properties文件
* @param sheetName 表格文件中的工作薄名称,如果为空则默认为“Sheet1”
* @param clazz 实体类
* @return 集合list
+ public static List&?& readExcel(String filePath, String configPath, String sheetName, Class&?& clazz){
List&Object& list = new ArrayList&Object&();
if(filePath.indexOf(&.xlsx&)&-1){
workbook = new XSSFWorkbook(new FileInputStream(filePath));
workbook = new HSSFWorkbook(new FileInputStream(filePath));
// 生成配置文件输入流
InputStream ins = new FileInputStream(configPath);
// 生成properties对象
Properties p = new Properties();
//存放配置文件中的键值对
Map&String, String& map = new LinkedHashMap&String, String&();
p.load(ins);
Enumeration en = p.propertyNames();
//在这里遍历
while (en.hasMoreElements()) {
String key = en.nextElement().toString();//key值
String Property = new String(p.getProperty(key));//value值
map.put(key, Property);
Set&String& key = map.keySet();//获取配置文件中所有的key
if(null == sheetName || &&.equals(sheetName)){
sheetName = &Sheet1&;
Sheet sheet = workbook.getSheet(sheetName); // 创建对工作表的引用
int rows = sheet.getPhysicalNumberOfRows();// 获取表格的行数
Row firstRow = sheet.getRow(0); // 获取单元格中表头的行对象
String[] firstRowNmae = new String[firstRow.getPhysicalNumberOfCells()];
for (int i = 0; i & firstRow.getPhysicalNumberOfCells(); i++) {
Cell cell = firstRow.getCell(i); // 获取指定单元格中的列
firstRowNmae[i] = cell.getStringCellValue();
// 循环遍历表格的行
for (int r = 1; r & r++) {
String value= &{&;
Row row = sheet.getRow(r); // 获取单元格中指定的行对象
if (row != null) {
int cells = row.getPhysicalNumberOfCells();// 获取单元格中指定列对象
for (int c = 0; c & c++) { // 循环遍历单元格中的列
Cell cell = row.getCell(c); // 获取指定单元格中的列
if (cell != null) {
for (Iterator it = key.iterator(); it.hasNext();) {
String s = (String) it.next();
if(map.get(s).equals(firstRowNmae[c])){
if (cell.getCellType() == Cell.CELL_TYPE_STRING) { // 判断单元格的值是否为字符串类型
value += &\&&+s+&\&:\&&+cell.getStringCellValue() + &\&,&;
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { // 判断单元格的值是否为数字类型
if(HSSFDateUtil.isCellDateFormatted(cell)){// 判断单元格的值是否为日期类型
DateFormat formater = new SimpleDateFormat(&yyyy-MM-dd&);
value += &\&&+s+&\&:\&&+formater.format(cell.getDateCellValue()) + &\&,&;
BigDecimal bd = new BigDecimal(cell.getNumericCellValue());
DecimalFormat df = new DecimalFormat(&0&);
String str = df.format(cell.getNumericCellValue());
value += &\&&+s+&\&:\&&+bd+ &\&,&;
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { // 判断单元格的值是否为布尔类型
value += &\&&+s+&\&:\&&+cell.getStringCellValue() + &\&,&;
if(!&{&.equals(value)){//不为空行时json串才有值,才能进行转换
value = value.substring(0, value.length()-1)+&}&;
list.add(Json.deserialize(value, clazz));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
\ No newline at end of file
Index: AvoidDuplicateSubmission.java
===================================================================
--- AvoidDuplicateSubmission.java (revision 0)
+++ AvoidDuplicateSubmission.java (revision 4)
@@ -0,0 +1,28 @@
+package com.first.
+import java.lang.annotation.ElementT
+import java.lang.annotation.R
+import java.lang.annotation.RetentionP
+import java.lang.annotation.T
+ * 防止重复提交注解,用于方法上&br/&
+ * 在新建页面方法上,设置needSaveToken()为true,此时拦截器会在Session中保存一个token,
+ * 同时需要在新建的页面中添加
+ * &input type=&hidden& name=&token& value=&${token}&&
+ * 保存方法需要验证重复提交的,设置needRemoveToken为true
+ * 此时会在拦截器中验证是否重复提交
+ * @author: chuanli
+ * @date: 上午11:14:02
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AvoidDuplicateSubmission {
boolean needSaveToken()
boolean needRemoveToken()
\ No newline at end of file
Index: Json.java
===================================================================
--- Json.java (revision 0)
+++ Json.java (revision 4)
@@ -0,0 +1,50 @@
+package com.first.
+import org.codehaus.jackson.map.ObjectM
+import java.io.IOE
+ * @author penggch
+@SuppressWarnings({&unchecked&, &rawtypes&})
+public class Json {
* @param object
public static String serialize(Object obj) {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(obj);
} catch (Exception e) {
* @param string
* @param clz
public static &T& T deserialize(String jsonString, Class&T& clz) {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(jsonString, clz);
} catch (IOException e) {
public static Object deserialize(String jsonString, String className) {
Class tclass =
tclass = Class.forName(className);
} catch (ClassNotFoundException e) {
return deserialize(jsonString, tclass);
Index: SendSMSTool.java
===================================================================
--- SendSMSTool.java (revision 0)
+++ SendSMSTool.java (revision 4)
@@ -0,0 +1,159 @@
+package com.first.
+import java.io.BufferedR
+import java.io.InputStreamR
+import java.io.OutputStreamW
+import java.io.UnsupportedEncodingE
+import java.net.MalformedURLE
+import java.net.URL;
+import java.net.URLC
+import java.net.URLE
+import org.dom4j.D
+import org.dom4j.DocumentH
+import org.dom4j.E
+ * 短信发送工具
+ * @author
+public class SendSMSTool {
* 短信请求地址
private String urlS
* 短信账号
* 短信密码
* 发送短信
* @param mobile
* @param content
* @param sendTime
* @return 短信记录号
* @throws MalformedURLException
public int send(String mobile, String content, String sendTime)
throws MalformedURLException {
String sendContent =
sendContent = URLEncoder.encode(content.replaceAll(&&br/&&, & &),
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
URL url = new URL(urlStr);
URLConnection con =
StringBuffer sb = new StringBuffer();
sb.append(&sn=&).append(sn).append(&&pwd=&).append(pwd).append(&&ext=&)
.append(&&stime=&).append(sendTime).append(&&rrid=&)
.append(&&mobile=&).append(mobile).append(&&content=&)
.append(sendContent);
con = url.openConnection();
con.setDoOutput(true);// 设置请求为post方式
con.setUseCaches(false);// post请求不能使用缓存
con.setRequestProperty(&Pragma:&, &no-cache&);
con.setRequestProperty(&Cache-Control&, &no-cache&);
con.setRequestProperty(&Content-Type&,
&application/x-www-form-urlencoded&);
OutputStreamWriter out = new OutputStreamWriter(
con.getOutputStream());
out.write(sb.toString());
out.flush();
out.close();
// 处理返回的数据
InputStreamReader input = new InputStreamReader(
con.getInputStream(), &GBK&);
BufferedReader br = new BufferedReader(input);
StringBuffer xmlsb = new StringBuffer();
String line = &&;
for (line = br.readLine(); line != line = br.readLine()) {
xmlsb.append(line);
Document doc = DocumentHelper.parseText(xmlsb.toString()); // 将字符串转为XML
Element rootElt = doc.getRootElement(); // 获取根节点
String result = rootElt.getText();
sendState = Integer.parseInt(result);
} catch (Exception e) {
e.printStackTrace();
return sendS
* 获取请求url
* @return url
public String getUrlStr() {
return urlS
* 设置请求url
* @param urlStr
public void setUrlStr(String urlStr) {
this.urlStr = urlS
* 获取短信账号
* @return 短信账号
public String getSn() {
* 设置短信账号
* @param sn
public void setSn(String sn) {
* 获取短信密码
* @return 短信密码
public String getPwd() {
* 设置短信密码
* @param pwd
public void setPwd(String pwd) {
this.pwd =
Index: DateUtil.java
===================================================================
--- DateUtil.java (revision 0)
+++ DateUtil.java (revision 4)
@@ -0,0 +1,184 @@
+package com.first.
+import java.text.SimpleDateF
+import java.util.C
+import java.util.D
+ * 继承DateUtil,新增获取本周的周一和周日日期的两个方法
+ * @author GuoXueliang
+public class DateUtil extends com.dgg.rockframework.util.DateUtil {
* 指定日期所属周第一天的日期,即本周周一的日期
* @param date 日期对象
* @return 指定日期所在周中周一的日期
public static Date firstDayOfWeek(Date date) {
Calendar calendar = DateUtil.toCalendar(date);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return calendar.getTime();
* 指定日期所属周最后一天的日期,即本周周日的日期
* @param date 日期对象
* @return 指定日期所在周中周日的日期
public static Date lastDayOfWeek(Date date) {
Calendar calendar = DateUtil.toCalendar(date);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
//转换为国人的思维,需要在次日期上延迟一周
return DateUtil.addDay(calendar.getTime(), 6);
//获取输入日期的星期一日期
public static String getMonday(String the_rq){
int n=getXC_days(the_rq);
return Q_N_Day(n,the_rq);
//获取输入日期的星期天日期
public static String getSunday(String the_rq){
int n=getXC_days(the_rq);
n=(6-(n*-1))*-1;
return Q_N_Day(n,the_rq);
+ // 获得输入日期与本周一相差的天数
public static int getXC_days(String rq){
SimpleDateFormat formatYMD=new SimpleDateFormat(&yyyy-MM-dd&);//formatYMD表示的是yyyy-MM-dd格式
SimpleDateFormat formatD=new SimpleDateFormat(&E&);//&E&表示&day in week&
String weekDay=&&;
int xcrq=0;
d=formatYMD.parse(rq);//将String 转换为符合格式的日期
weekDay=formatD.format(d);
if(weekDay.equals(&星期一&)){
if(weekDay.equals(&星期二&)){
if(weekDay.equals(&星期三&)){
if(weekDay.equals(&星期四&)){
if(weekDay.equals(&星期五&)){
if(weekDay.equals(&星期六&)){
if(weekDay.equals(&星期日&)){
}catch (Exception e){
e.printStackTrace();
public static String Q_N_Day(int N,String d1){//
String []d2=d1.split(&-&);
int year=Integer.parseInt(d2[0]);
int month=Integer.parseInt(d2[1]);
int day=Integer.parseInt(d2[2]);
if(day-N&=0){
if(month==1){
year=year-1;
day = day + 31-N;
month=month-1;
if (month == 2) {
if (year % 4 == 0) {
day = day + 29-N;
day = day + 28-N;
if(month==4||month==6||month==9||month==11){
day=day+30-N;
day=day+31-N;
///////////////////////////////////////////////////////////////////////////////////
if(month==12){
if((day-N)&31){
year=year+1;
day=(day-N)-31;
day=day-N;
if (month == 2) {
if (year % 4 == 0) {
if((day-N)&29){
day=(day-N)-29;
day=day-N;
if((day-N)&28){
day=(day-N)-28;
day=day-N;
if(month==4||month==6||month==9||month==11){
if((day-N)&30){
day=(day-N)-30;
day=day-N;
if((day-N)&31){
day=(day-N)-31;
day=day-N;
//day=day-N;
String str=String.valueOf(year);
if(month&10){
str=str+&-0&+String.valueOf(month);
str=str+&-&+String.valueOf(month);
if(day&10){
str=str+&-0&+String.valueOf(day);
str=str+&-&+String.valueOf(day);
Index: Constants.java
===================================================================
--- Constants.java (revision 0)
+++ Constants.java (revision 4)
@@ -0,0 +1,40 @@
+package com.first.
+import com.dgg.rockframework.util.DateU
+// TODO: Auto-generated Javadoc
+ * 常量类.
+ * @author Xiao
+public class Constants {
/** The Constant COMMA. */
public static final String COMMA = &,&;
/** 0天. */
static final String ZERODAY = &0天&;
/** 无. */
static final String WITHOUT = &无&;
/** 零. */
public static final String DECIMAL_ZERO = &0.00&;
/** 用于分割路径. */
public static final String SPT = &/&;
/** 点. */
public static final String POINT = &.&;
/** 用户头像上传地址. */
public static final String UPLOAD_USERFACE_PATH = &upload& + SPT + &userface& + SPT
+ DateUtil.nowStrByFormat(&yyyyMM&);
/** 用户实名认证的扫描件地址. */
public static final String UPLOAD_CARDIMAGE_PATH = &upload& + SPT + &cardimage& + SPT
+ DateUtil.nowStrByFormat(&yyyyMM&);
Index: SimpleStringUtil.java
===================================================================
--- SimpleStringUtil.java (revision 0)
+++ SimpleStringUtil.java (revision 4)
@@ -0,0 +1,179 @@
+package com.first.
+import java.lang.reflect.F
+import java.util.ArrayL
+import java.util.HashS
+import java.util.L
+import javax.persistence.C
+import javax.servlet.http.HttpServletR
+import com.dgg.rockframework.util.RegU
+import com.dgg.rockframework.util.StringU
+ * 简单的字符串处理工具
+ * @author
+public class SimpleStringUtil {
private static final String PERCENT = &%&;
public static String getBasePath(HttpServletRequest request){
return request.getScheme()+&://&+request.getServerName()+&:&+request.getServerPort()+request.getContextPath()+&/&;
* 用于拼接SQL查询时的匹配字符串,%xx%
* @param str
传进来的字符串
* @return 返回%str%
public static String toMatch(String str) {
return new StringBuffer(PERCENT).append(str).append(PERCENT).toString();
* 用于SQL查询时的左匹配字符串,%str
* @param str
传进来的字符串
* @return 返回%str
public static String toLeftMatch(String str) {
return new StringBuffer(PERCENT).append(str).toString();
* 用于SQL查询时的右匹配字符串,str%
* @param str
传进来的字符串
* @return 返回%tr%
public static String toRightMatch(String str) {
return new StringBuffer().append(str).append(PERCENT).toString();
* 将字符串根据指定的分隔符,转换成Long类型的数组
* @param str
需要被分割的字符串
* @param split
* @return 被拆分后的long数组
public static Long[] str2Array(String str, String split) {
String[] strs = str.split(split);
// 如果有&&和null,那么不转换
List&Long& longs = new ArrayList&Long&();
for (String s : strs) {
if (!StringUtil.isNullOrEmpty(s)) {
longs.add(new Long(s));
return longs.toArray(new Long[longs.size()]);
* 用于拼接where条件后面的HQL语句&br /&
* 要求from XXX xxx 此时的xxx这个别名应该是类名的首字母小写,禁止使用其他的命名,否则会出现无法查询 &br /&
* 实体类中的String类型进行 %的查询 实体类中的int或者integer,long,Long,double,Double 则进行 =
* 的查询,其他暂时不支持
* @param conditionValue
被搜索的值
* @param classes
很多个实体的Class
* @return HQL
public static String toHql(String conditionValue, Class&?&... classes) {
StringBuffer hqlBuffer = new StringBuffer();
for (Class&?& clazz : classes) {
String className = StringUtil.firstLowercase(clazz.getSimpleName());
for (Field field : BeanUtil.getAllFields(new HashSet&Field&(), clazz)) {
// 属性不能为static 或者 final
field.get(null);
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
// 如果是String
if (field.getType().equals(String.class)) {
hqlBuffer.append(className).append(&.&)
.append(field.getName()).append(& like '%&)
.append(conditionValue).append(&' &).append(&or &);
} else if (RegUtil.isNumber(conditionValue)
&& (field.getType().equals(Integer.class)
|| field.getType().equals(Long.class)
|| field.getType().equals(Double.class)
|| field.getType().equals(&int&)
|| field.getType().equals(&long&) || field
.getType().equals(&double&))) {
hqlBuffer.append(className).append(&.&)
.append(field.getName()).append(& = &)
.append(conditionValue).append(& &).append(&or &);
//去除最后一个or
hqlBuffer.replace(hqlBuffer.length() - 4, hqlBuffer.length() - 1, &&);
return hqlBuffer.toString();
* 用于拼接where条件后面的HQL语句&br /&
* 要求from XXX xxx 此时的xxx这个别名应该是类名的首字母小写,禁止使用其他的命名,否则会出现无法查询 &br /&
* 实体类中的String类型进行 %的查询 实体类中的int或者integer,long,Long,double,Double 则进行 =
* 的查询,其他暂时不支持
* @param conditionValue
被搜索的值
* @param classes
很多个实体的Class
* @return HQL
public static String toSql(String conditionValue, Class&?&... classes) {
StringBuffer hqlBuffer = new StringBuffer();
for (Class&?& clazz : classes) {
for (Field field : clazz.getDeclaredFields()) {
String fielName =
Column c = field.getAnnotation(Column.class);
if (c == null || StringUtil.isNullOrEmpty(c.name())) {
fielName = field.getName();
fielName = c.name();
// 如果是String
if (field.getType().equals(String.class)) {
hqlBuffer.append(&or &).append(fielName).append(&.&)
.append(field.getName()).append(& like '&)
.append(conditionValue).append(&%' &);
} else if (RegUtil.isNumber(conditionValue)
&& (field.getType().equals(Integer.class)
|| field.getType().equals(Long.class)
|| field.getType().equals(Double.class)
|| field.getType().equals(&int&)
|| field.getType().equals(&long&) || field
.getType().equals(&double&))) {
hqlBuffer.append(&or &).append(fielName).append(&.&)
.append(field.getName()).append(& = &)
.append(conditionValue).append(& &);
return hqlBuffer.toString();
Index: MailTool.java
===================================================================
--- MailTool.java (revision 0)
+++ MailTool.java (revision 4)
@@ -0,0 +1,159 @@
+package com.first.
+import java.io.F
+import java.io.UnsupportedEncodingE
+import java.util.P
+import javax.annotation.R
+import javax.mail.MessagingE
+import javax.mail.internet.MimeM
+import javax.mail.internet.MimeU
+import org.springframework.mail.javamail.JavaMailSenderI
+import org.springframework.mail.javamail.MimeMessageH
+import org.springframework.stereotype.S
+import com.dgg.rockframework.core.biz.BusinessE
+import com.first.pcb.emailInfo.entity.EmailC
+import com.first.pcb.emailInfo.service.EmailCfgS
+ * 邮件发送工具
+ * @author
+public class MailTool {
* 获取邮件配置的service
+ @Resource
+ private EmailCfgService emailCfgS
* 获取邮件发送器
+ private JavaMailSenderImpl getSender() {
EmailCfg info = ();
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(info.getSmtpHost());
mailSender.setUsername(info.getName());
mailSender.setPassword(info.getPassword());
mailSender.setPort(Integer.parseInt(info.getSmtpPort()));
Properties props = System.getProperties();
props.put(&mail.smtp.auth&, &true&);
props.put(&mail.smtp.timeout&, 25000);
mailSender.setJavaMailProperties(props);
return mailS
* 验证邮箱信息是否正确
* @return &true&正确
+ public void validEmail() {
this.sendSimpleMail(getFrom(), &SMTP信息验证&, &SUUCCESS&);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(&邮箱的信息错误,未通过验证!&);
* 发送简单邮件
* @param to
* @param subject
* @param text
* @throws MessagingException
+ public void sendSimpleMail(String to, String subject, String text)
throws MessagingException {
JavaMailSenderImpl mailSender = getSender();
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true,
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text);
helper.setFrom(this.getFrom(), this.getShowName());
} catch (Exception e1) {
helper.setFrom(this.getFrom());
mailSender.send(mimeMessage);
* 发送MIME类型邮件
* @param to
* @param subject
* @param text
* @param files
* @throws MessagingException
+ public void sendMimeMessage(String to, String subject, String text,
File[] files) throws MessagingException {
JavaMailSenderImpl mailSender = getSender();
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true,
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text, true);
helper.setFrom(this.getFrom(), this.getShowName());
} catch (Exception e1) {
helper.setFrom(this.getFrom());
if (null != files && files.length & 0) {
for (int i = 0; i & files. i++) {
File file = files[i];
String fileName = file.getName();
fileName = MimeUtility.encodeText(fileName);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
helper.addAttachment(fileName, file);
mailSender.send(mimeMessage);
* 获取发送者
* @return 发送者
+ private String getFrom() {
().getName();
* 获取发送者的显示名称
* @return 显示名称
+ private String getShowName() {
().getShowName();
Index: MethodLog.java
===================================================================
--- MethodLog.java (revision 0)
+++ MethodLog.java (revision 4)
@@ -0,0 +1,83 @@
+package com.first.
+import java.lang.annotation.D
+import java.lang.annotation.ElementT
+import java.lang.annotation.R
+import java.lang.annotation.RetentionP
+import java.lang.annotation.T
+// TODO: Auto-generated Javadoc
+ * 表示对标记有xxx注解的类,做代理 注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
+ * Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
+ * 这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配
+ * RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE
+ * 用@Retention(RetentionPolicy
+ * .CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
+ * 用@Retention(RetentionPolicy.SOURCE
+ * )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
+ * 用@Retention(RetentionPolicy.RUNTIME
+ * )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
+ * 所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME
+ * 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.
+ * 类和方法的annotation缺省情况下是不出现在javadoc中的,为了加入这个性质我们用@Documented
@interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。
+ * @author q
+ * @interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字
+@Target({ ElementType.METHOD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface MethodLog {
* @return the string
String remark() default &&;
* 是否为对象
boolean isObj()
* 对象参数名
String objArguStr() default &&;
boolean isPra()
* 是否为管理员
boolean isAdmin()
* 是否为批量操作
boolean isBatch()
* 如果是批量操作是否是id
boolean isId()
Class&?& target() default Object.
* 简单方式
boolean isSimple()
* 第几个参数
int arguIndex() default 0;
(C)&&2013&&Alibaba&&Inc.&&All&&rights&&resvered.
Powered by

我要回帖

更多关于 newface作品集 98本 的文章

 

随机推荐