/** * EAN-13 generator для e2e: префикс "20" (внутренний магазинный, как и * в src/food-market.web/src/lib/barcode.ts), 10 цифр payload + checksum. * Использует индекс шага вместо рандома, чтобы прогон был детерминированным * и легче отлавливать дубликаты в отчёте. */ function ean13Checksum(twelve: string): number { let sum = 0 for (let i = 0; i < 12; i++) { const d = twelve.charCodeAt(i) - 48 sum += i % 2 === 0 ? d : d * 3 } return (10 - (sum % 10)) % 10 } /** * Сгенерировать валидный EAN-13. Префикс "20" — резерв для внутренних * штрихкодов магазина (in-store). Тело: timestamp.slice(-7) + index в * 3-значной форме, итого 10 цифр payload. Получаем 13-значный код с * контрольной суммой. */ export function generateEan13(index: number): string { const ts = Date.now().toString().slice(-7) const idx = String(index).padStart(3, '0') const body = '20' + ts + idx return body + ean13Checksum(body).toString() }