/** EAN-13 check digit: weights alternate 1,3 over the first 12 digits. */ export function ean13CheckDigit(first12: string): number { if (!/^\d{12}$/.test(first12)) throw new Error('EAN-13 body must be 12 digits') let sum = 0 for (let i = 0; i < 12; i++) { sum += Number(first12[i]) * (i % 2 === 0 ? 1 : 3) } return (10 - (sum % 10)) % 10 } export function isValidEan13(code: string): boolean { return /^\d{13}$/.test(code) && ean13CheckDigit(code.slice(0, 12)) === Number(code[12]) }