isIDCard18Exact method
Return whether input matches regex of exact id card number which length is 18. 返回输入是否匹配长度为18的id卡号的正则表达式。
Implementation
bool isIDCard18Exact(String input) {
if (isIDCard18(input)) {
List<int> factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
List<String> suffix = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
if (cityMap.isEmpty) {
List<String> list = ID_CARD_PROVINCE_DICT;
List<MapEntry<String, String>> mapEntryList = [];
for (int i = 0, length = list.length; i < length; i++) {
List<String> tokens = list[i].trim().split('=');
MapEntry<String, String> mapEntry = MapEntry(tokens[0], tokens[1]);
mapEntryList.add(mapEntry);
}
cityMap.addEntries(mapEntryList);
}
if (cityMap[input.substring(0, 2)] != null) {
int weightSum = 0;
for (int i = 0; i < 17; ++i) {
weightSum += (input.codeUnitAt(i) - '0'.codeUnitAt(0)) * factor[i];
}
int idCardMod = weightSum % 11;
String idCardLast = String.fromCharCode(input.codeUnitAt(17));
return idCardLast == suffix[idCardMod];
}
}
return false;
}