import { useEffect, useState } from "react"; type Props = { updateIdList: (cids: string[]) => void; }; export default function IdComponent({ updateIdList }: Props) { const [idSet, setIdSet] = useState>(new Set()); const onValidId = (id: string) => { const newSet = new Set(idSet.add(id)); setIdSet(newSet); updateIdList([...newSet]); }; const removeCid = (id: string) => { const newSet = new Set([...idSet].filter((x) => x !== id)); setIdSet(newSet); updateIdList([...newSet]); }; return (
{Array.from(idSet).map((v) => ( ))}
); } type FixedIdProps = { cid: string; removeCid: (cid: string) => void; }; function FixedId({ cid, removeCid }: FixedIdProps) { return (
); } type SingleIdProps = { onValidId: (cid: string) => void; }; function SingleIdComponent({ onValidId }: SingleIdProps) { const [isValid, setIsValid] = useState(false); const [cid, setCid] = useState(""); useEffect(() => { const isValidId = isValidThaiID(cid); setIsValid(isValidId); if (isValidId) { onValidId(cid); setCid(""); } }, [cid, onValidId]); return (
setCid(v.target.value)} value={cid} /> {isValid ?

OK

: null}
); } function isValidThaiID(id: string) { if (!/^\d{13}$/.test(id)) { return false; } let sum = 0; for (let i = 0; i < 12; i++) { sum += Number(id[i]) * (13 - i); } const checkSum = (11 - (sum % 11)) % 10; return checkSum === Number(id[12]); }