Staaarter

Billing Tax ID Verification

A tax identification number field, VAT, GST, EIN, or similar, with a Verify button that shows a loading state and then either a verified result with the matched business name or an invalid-format error. Meant for checkout and billing settings screens where a business customer needs to attach a tax ID before it's applied to future invoices.

By Staaarter Team
Billing
Updated April 22, 2026
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its input, label, badge, button dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/billing-tax-id-verification.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/billing/billing139.tsx instead.

Usage

The file also exports billing139Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Billing139, billing139Demo } from "@/components/blocks/billing/billing139";

export default function Page() {
  return <Billing139 {...billing139Demo} />;
}

Props

PropTypeDefaultDescription
headingstring"Tax ID verification"Heading shown above the input.
descriptionstringnoneOptional supporting text under the heading.
taxIdTypestring"VAT"Short label shown in the top-right badge, e.g. VAT, GST, EIN.
labelstring`${taxIdType} number`Field label; falls back to a string built from taxIdType.
placeholderstring"e.g. DE123456789"Input placeholder text.
helperTextstringnoneOptional hint shown under the input before the user verifies, replaced by the result once one exists.
defaultValuestring""Initial value of the tax ID input.
verifiedBusinessNamestringnoneBusiness name shown on a successful verification, as if returned by a lookup service.
minLengthnumber8Minimum digit count (spaces stripped) the demo verification treats as a plausible format.
reverseChargeNotestring"Reverse charge applies. Tax will not be added to your invoices."Note shown under the business name once verified.
classNamestringnoneExtra classes for the outer container.

Behavior notes

  • Clicking Verify sets a 1.1s simulated loading state, then marks the ID verified or invalid based on whether the stripped input meets minLength. There's no real VIES or Stripe call; wire handleVerify's timeout to your own lookup endpoint.
  • Editing the input after a result resets the status back to idle, so a corrected ID has to be re-verified.
  • The Verify button is disabled while the input is empty or a check is already in flight.
  • The status region uses aria-live="polite" and role="status" so screen reader users hear the verified or invalid result without needing to refocus the field.

Frequently asked questions