1. 前言
公章是一种保证文件真实性、合法性和权威性的重要方式之一。然而,在现实生活中,公章的真伪增加了考验,不法分子利用高科技手段伪造公章,在合同签订、行政审批、贷款申请等方面制造了极大的麻烦。本文将介绍Java技术如何辨别合同上的公章真假。
2. 公章基本信息
2.1 公章构成和种类
公章一般由骨架、定位圆、边沿线、中心图案以及文字构成,可以分为国家机关、企业单位和事业单位三种类型。
国家机关章包括国徽章、国务院章、省政府章、县级政府章等。
企业单位章包括公司公章、财务专用章、合同专用章等。
事业单位章包括公共事业单位专用章、学校专用章、医院专用章等。
2.2 公章的防伪措施
目前,公章的防伪措施种类繁多,造假者也因此显得更具难度。但有几个基本的防伪措施:
1. 防止盗用和伪造。公章应由专人管理,设立章库,公章不得外借或随意转移。在公章上应刻制较为复杂的图案和文字以及可供鉴别的特征。
2. 防止简单复制。公章使用者应解除与公司的htq绑定,确保安全。
3. 防止仿制。公章应使用特殊的材质和技术加工,如钢套红胶章、立体图案章等。
3. Java技术辨别公章真假
3.1 密码验证(PBE算法)
密码(Password-Based Encryption,简称PBE)算法是一种基于口令来加密和解密数据的算法。使用该算法可以将敏感信息在网络环境下进行加密,并在网上流通。
下面是使用Java中的PBE算法对印章进行加/解密的示例代码。
public static void main(String[] args) {
String origin = "公章";
String password = "123456";
byte[] salt = new byte[]{0x1, 0x3, 0x3, 0x7, 0x0, 0x2, 0x2, 0x7};
// 加密
byte[] encryptResult = PBEUtil.encrypt(origin.getBytes(), password, salt);
System.out.println("加密结果:" + Base64Util.byteArrayToBase64String(encryptResult));
// 解密
byte[] decryptResult = PBEUtil.decrypt(encryptResult, password, salt);
System.out.println("解密结果:" + new String(decryptResult));
}
该算法虽然可以保证数据传输的安全性,但不能鉴定公章真伪。
3.2 校验印章图案(Zxing库)
Zxing是一个功能强大的开源条码处理库,可以用于生成和解码多种类型的二维码和条形码。在印章鉴定中,我们可以利用Zxing库来校验公章中心图案的一致性。
下面是使用Java中的Zxing库对印章中心图案进行解码的示例代码。
public static void main(String[] args) throws Exception {
File file = new File("chop.png");
BufferedImage image = ImageIO.read(file);
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
Map hintMap = new EnumMap<>(DecodeHintType.class);
hintMap.put(DecodeHintType.CHARACTER_SET, "UTF-8");
hintMap.put(DecodeHintType.POSSIBLE_FORMATS, BarcodeFormat.QR_CODE);
hintMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
Result qrCodeResult = new MultiFormatReader().decode(binaryBitmap, hintMap);
String qrcode = qrCodeResult.getText();
System.out.println(qrcode);
}
Zxing库可以根据印章图案的不同来进行鉴定,但如果多数印章图案差异不大时,该技术无法达到较好效果。
3.3 数字指纹技术
数字指纹技术是一种通过对数字文件进行数字指纹提取,并将其与之前生成的“指纹库”中的数据进行比对,来识别文件真伪的技术。
下面是使用Java中的Digital-Fingerprints-Library(DFL)数字指纹库对印章进行指纹提取和比对的示例代码
public static void main(String[] args) throws Exception {
File file = new File("seal.jpg");
BufferedImage image = ImageIO.read(file);
DigitalFingerprints fingerprints = new DigitalFingerprints(new DFL().fuzzyHashing());
String originFingerprint = fingerprints.getFingerprint(image);
// 从数据库中获取印章指纹
String dbFingerprint = "df509283273df93c6d0cf662d42b0cf2554de550733a3f100be6adf6923e1d9d";
// 比对指纹
boolean isMatch = fingerprints.compare(originFingerprint, dbFingerprint, temperature);
System.out.println("比对结果:" + isMatch);
}
数字指纹技术可以提高鉴定准确性,但还需基于多方数据比对,以确保对公章的鉴定能够客观、准确。
4. 结论
Java技术可以通过多种手段辨别公章真假,上述3种方式虽然各有优缺点,但可以综合运用,提高鉴定准确性。在具体运用过程中,还应注意严格执行公章办理和使用管理制度,将公章管理法制化,以保证公章使用的合法性,减少公章造假行为的发生。