UNPKG

@himorishige/noren-plugin-jp

Version:

Japan-specific PII detection plugin for Noren (phone numbers, postal codes, MyNumber)

33 lines (32 loc) 1.22 kB
// Validation utilities for Japanese PII types /** * Validates Japanese My Number (マイナンバー) with checksum verification */ export function validateMyNumber(input) { const digits = input.replace(/[^\d]/g, ''); if (digits.length !== 12) { return { valid: false, reason: 'invalid_length' }; } // Check for repeating digits pattern if (/^(\d)\1{11}$/.test(digits)) { return { valid: false, reason: 'repeating_digits' }; } // Calculate checksum using official algorithm // Weights: [6,5,4,3,2,7,6,5,4,3,2] applied from left to right const weights = [6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2]; const base = digits.slice(0, 11); const checkDigit = Number(digits[11]); let sum = 0; for (let i = 0; i < 11; i++) { sum += Number(base[i]) * weights[i]; } const remainder = sum % 11; const calculatedCheck = remainder <= 1 ? 0 : 11 - remainder; const isValid = calculatedCheck === checkDigit; return { valid: isValid, reason: isValid ? 'checksum_valid' : 'checksum_invalid', confidence: isValid ? 0.95 : 0.3, normalized: `${digits.slice(0, 4)}-${digits.slice(4, 8)}-${digits.slice(8)}`, }; }