{"version":3,"sources":["app.js"],"names":["IdentityNoType","NationalIdNo","NewUnifiedNo","OldUnifiedNo","UnifiedBusinessNo","KEY","currentClass","branchID","storedItem","localStorage","getItem","validID","idNumber","length","checkIdNo","idNo","allowedType","capitals","unifiedNoFirstInts","unifiedNoSecondInts","businessNoMultipliers","verifyNum","capitalInts","validateOldUnifiedNo","reg","indexOf","idNoCharArray","validateNationalIdNo","test","i","split","validateUnifiedBussinessNo","j","RegExp","isValid","$","window","addEventListener","tens","ones","displayMessage","evt","document","documentElement","style","setProperty","product","data","type","isFlutterApp","navigator","userAgent","includes","addClass"],"mappings":"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","file":"app.js","sourcesContent":["'use strict';\r\n\r\nvar IdentityNoType = {\r\n NationalIdNo: 1, // 身分證字號\r\n NewUnifiedNo: 1 << 1, // 新式統一證號\r\n OldUnifiedNo: 1 << 2, // 舊式統一證號\r\n UnifiedBusinessNo: 1 << 3, // 統一編號\r\n};\r\nvar KEY = 'EOAUTH.v1';\r\nvar currentClass = 'id';\r\nvar branchID = '8840';\r\nvar storedItem = localStorage.getItem(KEY);\r\nfunction validID(idNumber) {\r\n if (idNumber.length === 8) {\r\n return checkIdNo(idNumber, IdentityNoType.UnifiedBusinessNo);\r\n } else if (idNumber.length === 10) {\r\n return checkIdNo(\r\n idNumber,\r\n IdentityNoType.NationalIdNo | IdentityNoType.NewUnifiedNo | IdentityNoType.OldUnifiedNo,\r\n );\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction checkIdNo(idNo, allowedType) {\r\n // 身分證第一碼(10-35),3 個特例 (W:32、I:34、O:35)\r\n const capitals = [\r\n 'A',\r\n 'B',\r\n 'C',\r\n 'D',\r\n 'E',\r\n 'F',\r\n 'G',\r\n 'H',\r\n 'I',\r\n 'J',\r\n 'K',\r\n 'L',\r\n 'M',\r\n 'N',\r\n 'O',\r\n 'P',\r\n 'Q',\r\n 'R',\r\n 'S',\r\n 'T',\r\n 'U',\r\n 'V',\r\n 'W',\r\n 'X',\r\n 'Y',\r\n 'Z',\r\n ];\r\n // 身分證第一碼(10-35)轉換後,十位數*1 + 個位數*9\r\n const capitalInts = [\r\n 1, 10, 19, 28, 37, 46, 55, 64, 39, 73, 82, 2, 11, 20, 48, 29, 38, 47, 56, 65, 74, 83, 21, 3,\r\n 12, 30,\r\n ];\r\n // 舊居留證第一碼(10-35)轉換後,十位數*1 + 個位數*9\r\n // 因檢查碼只要檢查是否為 10 的倍數,這裡直接作 [(十位數*1) % 10] + [(個位數*9) % 10]\r\n const unifiedNoFirstInts = [\r\n 1, 10, 9, 8, 7, 6, 5, 4, 9, 3, 2, 2, 11, 10, 8, 9, 8, 7, 6, 5, 4, 3, 11, 3, 12, 10,\r\n ];\r\n // 舊居留證第二碼(10-35)轉換後,個位數*8\r\n // 因檢查碼只要檢查是否為 10 的倍數,這裡直接作 [(個位數*8) % 10]\r\n const unifiedNoSecondInts = [\r\n 0, 8, 6, 4, 2, 0, 8, 6, 2, 4, 2, 0, 8, 6, 0, 4, 2, 0, 8, 6, 4, 2, 6, 0, 8, 4,\r\n ];\r\n const businessNoMultipliers = [1, 2, 1, 2, 1, 2, 4, 1];\r\n\r\n function validateNationalIdNo(reg) {\r\n if (!reg.test(idNo)) {\r\n return false;\r\n }\r\n\r\n const idNoCharArray = idNo.split('');\r\n let verifyNum = 0;\r\n\r\n // 基數 += 第 1 碼\r\n verifyNum += capitalInts[capitals.indexOf(idNoCharArray[0])];\r\n\r\n // 基數 += 第 2-9 碼相加\r\n for (let i = 1, j = 8; i < 9; i++, j--) {\r\n verifyNum += +idNoCharArray[i] * j;\r\n }\r\n\r\n // (10 - 基數之個位數) % 10\r\n verifyNum = (10 - (verifyNum % 10)) % 10;\r\n\r\n return verifyNum === +idNoCharArray[9];\r\n }\r\n\r\n function validateOldUnifiedNo() {\r\n const reg = new RegExp(/^[A-Z]{1}[A-D]{1}[0-9]{8}$/);\r\n\r\n if (!reg.test(idNo)) {\r\n return false;\r\n }\r\n\r\n const idNoCharArray = idNo.split('');\r\n let verifyNum = 0;\r\n\r\n // 基數 += 第 1 碼\r\n verifyNum += unifiedNoFirstInts[capitals.indexOf(idNoCharArray[0])];\r\n\r\n // 基數 += 第 2 碼\r\n verifyNum += unifiedNoSecondInts[capitals.indexOf(idNoCharArray[1])];\r\n\r\n // 基數 += 第 3-9 碼相加\r\n for (let i = 2, j = 7; i < 9; i++, j--) {\r\n verifyNum += +idNoCharArray[i] * j;\r\n }\r\n\r\n // (10 - 基數之個位數) % 10\r\n verifyNum = (10 - (verifyNum % 10)) % 10;\r\n\r\n return verifyNum === +idNoCharArray[9];\r\n }\r\n\r\n function validateUnifiedBussinessNo() {\r\n const reg = new RegExp(/^(?!11111111|00000000)[0-9]{8}$/);\r\n\r\n if (!reg.test(idNo)) {\r\n return false;\r\n }\r\n\r\n const idNoCharArray = idNo.split('');\r\n let verifyNum = 0;\r\n\r\n // 乘積的十位數與個位數總和\r\n for (let i = 0; i < 8; i++) {\r\n const product = +idNoCharArray[i] * businessNoMultipliers[i];\r\n const tens = product % 10;\r\n const ones = (product - tens) / 10;\r\n verifyNum += tens + ones;\r\n }\r\n\r\n return verifyNum % 5 === 0 || (+idNoCharArray[6] === 7 && (verifyNum + 1) % 5 === 0);\r\n }\r\n\r\n let isValid = false;\r\n\r\n allowedType =\r\n allowedType ||\r\n IdentityNoType.NationalIdNo |\r\n IdentityNoType.OldUnifiedNo |\r\n IdentityNoType.NewUnifiedNo |\r\n IdentityNoType.UnifiedBusinessNo;\r\n\r\n // 身分證字號\r\n if (IdentityNoType.NationalIdNo & allowedType) {\r\n isValid = validateNationalIdNo(new RegExp(/^[A-Z]{1}[1-2]{1}[0-9]{8}$/));\r\n }\r\n // 新式統一證號\r\n if (!isValid && IdentityNoType.NewUnifiedNo & allowedType) {\r\n isValid = validateNationalIdNo(new RegExp(/^[A-Z]{1}[89]{1}[0-9]{8}$/));\r\n }\r\n // 舊式統一證號\r\n if (!isValid && IdentityNoType.OldUnifiedNo & allowedType) {\r\n isValid = validateOldUnifiedNo();\r\n }\r\n // 統一編號\r\n if (!isValid && IdentityNoType.UnifiedBusinessNo & allowedType) {\r\n isValid = validateUnifiedBussinessNo();\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\nfunction displayMessage(evt) {\r\n switch (evt.data.type) {\r\n case 'safearea-height': {\r\n document.documentElement.style.setProperty('--safe-top', `${evt.data.data}px`);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n$(function () {\r\n window.isFlutterApp = function () {\r\n return (\r\n navigator.userAgent.includes('Fugle-App-Flutter') ||\r\n navigator.userAgent.includes('FugleTrade-App-Flutter')\r\n );\r\n };\r\n\r\n if (window.isFlutterApp()) {\r\n $('body').addClass('is-flutter');\r\n }\r\n\r\n if (window.addEventListener) {\r\n window.addEventListener('message', displayMessage, false);\r\n }\r\n});\r\n"]}