package com.mm.android.deviceaddmodule.mobilecommon.AppConsume;
|
|
import android.text.TextUtils;
|
|
/**
|
* <p>
|
* 伪json格式的二维码扫描结果
|
* </p>
|
*/
|
public class PseudoJsonScanResult extends ScanResult {
|
|
private static final String TAG = "JsonScanResult";
|
private static final String[] SN_TAGS = new String[]{"SN:", "sN:", "Sn:", "sn:", "SN:", "sN:", "Sn:", "sn:"};
|
private static final String[] DT_TAGS = new String[]{"DT:", "dT:", "Dt:", "dt:", "DT:", "dT:", "Dt:", "dt:"};
|
private static final String[] RD_TAGS = new String[]{"RD:", "rD:", "Rd:", "rd:", "RD:", "rD:", "Rd:", "rd:"};
|
private static final String[] RC_TAGS = new String[]{"RC:", "rC:", "Rc:", "rc:", "RC:", "rC:", "Rc:", "rc:"};
|
|
/**
|
* 创建一个新的实例JsonScanResult.
|
*
|
* @param scanString
|
*/
|
public PseudoJsonScanResult(String scanString) {
|
super(scanString);
|
|
//解析伪Json 类似{SN:DVRP2P00LJL0028,DT:DH/HCVR1604HG-SFD-V4/-AF-DVR-II-A/16-16,RC:SQ93W5}
|
|
String jsonStr;
|
int firstIndex = scanString.indexOf("{");
|
if (firstIndex >= 0 && firstIndex <= scanString.length() - 1) {
|
jsonStr = scanString.substring(firstIndex, scanString.length());
|
} else {
|
jsonStr = scanString;
|
}
|
|
int snEndIndex = -1;
|
int dtEndIndex = -1;
|
int rdEndIndex = -1;
|
int snStartIndex = getStartIndex(jsonStr, SN_TAGS, -1);
|
int dtStartIndex = getStartIndex(jsonStr, DT_TAGS, -1);
|
int rdStartIndex = getStartIndex(jsonStr, RD_TAGS, -1);
|
rdStartIndex = getStartIndex(jsonStr, RC_TAGS, rdStartIndex);
|
|
if (snStartIndex == -1) {
|
this.setSn("");
|
return;
|
}
|
|
|
if (snStartIndex > dtStartIndex && snStartIndex > rdStartIndex) { // sn在最后
|
if (dtStartIndex == -1 && rdStartIndex == -1) { // {sn:}
|
snEndIndex = jsonStr.length() - 1;
|
|
} else if (dtStartIndex == -1 && rdStartIndex != -1) { // {rd:,sn:}
|
rdEndIndex = snStartIndex - 1;
|
snEndIndex = jsonStr.length() - 1;
|
} else if (dtStartIndex != -1 && rdStartIndex == -1) { // {dt:,sn:}
|
dtEndIndex = snStartIndex - 1;
|
snEndIndex = jsonStr.length() - 1;
|
} else {
|
if (dtStartIndex > rdStartIndex) { // {rd:,dt:,sn:}
|
rdEndIndex = dtStartIndex - 1;
|
dtEndIndex = snStartIndex - 1;
|
snEndIndex = jsonStr.length() - 1;
|
} else { // {dt:,rd:,sn:}
|
dtEndIndex = rdStartIndex - 1;
|
rdEndIndex = snStartIndex - 1;
|
snEndIndex = jsonStr.length() - 1;
|
}
|
}
|
} else if (dtStartIndex > snStartIndex && dtStartIndex > rdStartIndex) { // dt在最后
|
if (rdStartIndex == -1) {
|
snEndIndex = dtStartIndex - 1;
|
dtEndIndex = jsonStr.length() - 1;
|
} else if (snStartIndex > rdStartIndex) {
|
rdEndIndex = snStartIndex - 1;
|
snEndIndex = dtStartIndex - 1;
|
dtEndIndex = jsonStr.length() - 1;
|
|
} else if (snStartIndex < rdStartIndex) {
|
snEndIndex = rdStartIndex - 1;
|
rdEndIndex = dtStartIndex - 1;
|
dtEndIndex = jsonStr.length() - 1;
|
}
|
} else if (rdStartIndex > snStartIndex && rdStartIndex > dtStartIndex) { // rd在最后
|
if (dtStartIndex == -1) {
|
snEndIndex = rdStartIndex - 1;
|
rdEndIndex = jsonStr.length() - 1;
|
} else if (snStartIndex > dtStartIndex) {
|
dtEndIndex = snStartIndex - 1;
|
snEndIndex = rdStartIndex - 1;
|
rdEndIndex = jsonStr.length() - 1;
|
|
} else if (snStartIndex < dtStartIndex) {
|
snEndIndex = dtStartIndex - 1;
|
dtEndIndex = rdStartIndex - 1;
|
rdEndIndex = jsonStr.length() - 1;
|
}
|
}
|
|
if (rdStartIndex != -1) {
|
this.setRegcode(filterInvalidString(jsonStr.substring(rdStartIndex + 2, rdEndIndex)));
|
} else {
|
this.setRegcode("");
|
}
|
|
if (dtStartIndex != -1) {
|
this.setMode(filterInvalidString4Type(jsonStr.substring(dtStartIndex + 2, dtEndIndex)));
|
} else {
|
this.setMode("");
|
}
|
this.setSn(filterInvalidString(jsonStr.substring(snStartIndex + 2, snEndIndex)));
|
|
}
|
|
private int getStartIndex(String jsonStr, String[] tags, int startIndex) {
|
for (String dttag : tags) {
|
if (jsonStr.contains(dttag)) {
|
return jsonStr.indexOf(dttag) + 1;
|
}
|
}
|
return startIndex;
|
}
|
|
public static String filterInvalidString(String str) {
|
if (TextUtils.isEmpty(str)) {
|
return str;
|
}
|
String numberAndAbc = "[a-zA-Z0-9]";
|
StringBuilder buffer = new StringBuilder();
|
int len = str.length();
|
for (int i = 0; i < len; ++i) {
|
String temp = str.substring(i, i + 1);
|
if (temp.matches(numberAndAbc)) {
|
buffer.append(temp);
|
}
|
}
|
return buffer.toString();
|
}
|
|
public static String filterInvalidString4Type(String str) {
|
if (TextUtils.isEmpty(str)) {
|
return str;
|
}
|
String numberAndAbc = "[a-zA-Z0-9-/\\\\]";
|
StringBuilder buffer = new StringBuilder();
|
int len = str.length();
|
for (int i = 0; i < len; ++i) {
|
String temp = str.substring(i, i + 1);
|
if (temp.matches(numberAndAbc)) {
|
buffer.append(temp);
|
}
|
}
|
return buffer.toString();
|
}
|
|
}
|