IDCode18 = {
validate: function (value) {
if (value.length != 18) return false;
var value = value.toLowerCase();
var sum = 0, v = '10x98765432', w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], a = '11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91';
var re = value.match(/^(\d{2})\d{4}(\d{4})(\d{2})(\d{2})\d{3}[x\d]$/);
if (re == null || a.indexOf(re[1]) < 0) return false;
if (!this._validateDate(re[2], re[3], re[4])) return false;
for (var i = 0; i < 17; i++) sum += value.charAt(i) * w[i];
return value.charAt(17) == v.charAt(sum % 11);
},
getBirth: function (value, fmt) {
if (!this.validate(value)) return '';
fmt = fmt || 'yyyy-MM-dd';
var y = value.substr(6, 4), m = value.substr(10, 2), d = value.substr(12, 2);
return fmt.replace('yyyy', y).replace('MM', m).replace('M', parseInt(m, 10)).replace('dd', d).replace('d', parseInt(d, 10));
},
getSex: function (value) {
if (!this.validate(value)) return '';
return value.substr(16, 1) % 2 == 0 ? '女' : '男';
},
_validateDate: function (y, m, d) {
var dd = new Date(y, parseInt(m, 10) - 1, parseInt(d, 10));
return dd.getFullYear() == y && dd.getMonth() + 1 == parseInt(m, 10) && dd.getDate() == parseInt(d, 10);
}
}