{"id":48845654,"url":"https://github.com/levitasorg/levitas-validators","last_synced_at":"2026-04-15T05:03:17.610Z","repository":{"id":351033697,"uuid":"1209172100","full_name":"levitasOrg/levitas-validators","owner":"levitasOrg","description":"Zero-dependency Java validators for Indian identifiers — GSTIN, PAN, HSN, IFSC, UPI VPA, Aadhaar. Offline, thread-safe, Apache 2.0.","archived":false,"fork":false,"pushed_at":"2026-04-13T10:02:49.000Z","size":53,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-13T11:13:09.508Z","etag":null,"topics":["aadhaar","dpdp","fintech","gstin","ifsc","india","java","maven-central","pan","upi","validation"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/levitasOrg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-13T06:56:39.000Z","updated_at":"2026-04-13T10:02:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/levitasOrg/levitas-validators","commit_stats":null,"previous_names":["levitasorg/levitas-validators"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/levitasOrg/levitas-validators","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levitasOrg%2Flevitas-validators","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levitasOrg%2Flevitas-validators/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levitasOrg%2Flevitas-validators/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levitasOrg%2Flevitas-validators/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/levitasOrg","download_url":"https://codeload.github.com/levitasOrg/levitas-validators/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levitasOrg%2Flevitas-validators/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31826907,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"online","status_checked_at":"2026-04-15T02:00:06.175Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aadhaar","dpdp","fintech","gstin","ifsc","india","java","maven-central","pan","upi","validation"],"created_at":"2026-04-15T05:03:12.742Z","updated_at":"2026-04-15T05:03:17.602Z","avatar_url":"https://github.com/levitasOrg.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Levitas Validators\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.levitasorg/levitas-validators.svg)](https://central.sonatype.com/artifact/io.github.levitasorg/levitas-validators)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![CI](https://github.com/levitasOrg/levitas-validators/actions/workflows/ci.yml/badge.svg)](https://github.com/levitasOrg/levitas-validators/actions)\n\nFast, zero-dependency Java validators for Indian identifiers — GSTIN, PAN, HSN, IFSC, UPI VPA, Aadhaar, and more. Pure offline validation with checksum verification, entity type extraction, and DPDP-compliant masking.\n\nBuilt for every backend team that's tired of copy-pasting regex from Stack Overflow.\n\n## Why Levitas?\n\nEvery Indian backend developer has written (badly) some version of:\n\n```java\nif (!gstin.matches(\"[0-9]{2}[A-Z]{5}...\")) throw ...\n```\n\nThat regex doesn't verify the checksum. It doesn't tell you the state. It doesn't extract the PAN. It doesn't decode the entity type. And you've written the same thing for PAN, IFSC, HSN codes, and UPI VPAs.\n\nLevitas gives you all of that in one small, well-tested library.\n\n## Features\n\n- **GSTIN** — format, checksum, state extraction, PAN extraction, entity type\n- **PAN** — format validation, entity type decoding (individual, company, HUF, etc.)\n- **HSN codes** — 4/6/8 digit validation with turnover-based rules\n- **IFSC** — format validation with bank name lookup\n- **UPI VPA** — format validation with PSP detection (GPay, PhonePe, Paytm, etc.)\n- **Aadhaar** — Verhoeff checksum + DPDP-compliant masking\n- **Bank account masking** — log-safe PII helpers\n- Pure offline — no network calls, no credentials, no API keys\n- Minimal dependencies (just Jackson for bundled lookups)\n- Thread-safe and immutable\n- Full Javadoc\n\n## Installation\n\n**Maven:**\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.levitasorg\u003c/groupId\u003e\n    \u003cartifactId\u003elevitas-validators\u003c/artifactId\u003e\n    \u003cversion\u003e0.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n**Gradle:**\n\n```gradle\nimplementation 'io.github.levitasorg:levitas-validators:0.1.0'\n```\n\nRequires Java 17+.\n\n## Quick start\n\n### GSTIN\n\n```java\nimport io.github.levitasorg.validators.gstin.GstinValidator;\nimport io.github.levitasorg.validators.gstin.GstinInfo;\n\nboolean valid = GstinValidator.isValid(\"29AAACB1234C1ZB\");\n\nGstinInfo info = GstinValidator.parse(\"29AAACB1234C1ZB\");\ninfo.getStateCode();              // StateCode.KARNATAKA\ninfo.getStateCode().getDisplayName(); // \"Karnataka\"\ninfo.getPan();                    // \"AAACB1234C\"\ninfo.getEntityCode();             // \"1\"\n```\n\n### PAN\n\n```java\nimport io.github.levitasorg.validators.pan.PanValidator;\n\nPanValidator.isValid(\"AAACB1234C\");              // true\nPanValidator.getEntityType(\"AAACB1234C\");        // Optional[COMPANY]\nPanValidator.isIndividual(\"ABCPD1234F\");         // true\n```\n\n### HSN codes\n\n```java\nimport io.github.levitasorg.validators.hsn.HsnValidator;\nimport java.math.BigDecimal;\n\nHsnValidator.isValid(\"8471\");                                          // true\nHsnValidator.getRequiredDigits(new BigDecimal(\"10000000\"));            // 4\nHsnValidator.getRequiredDigits(new BigDecimal(\"100000000\"));           // 6\nHsnValidator.isValidForTurnover(\"8471\", new BigDecimal(\"100000000\"));  // false\n```\n\n### IFSC\n\n```java\nimport io.github.levitasorg.validators.ifsc.IfscValidator;\n\nIfscValidator.isValid(\"HDFC0001234\");          // true\nIfscValidator.getBankName(\"HDFC0001234\");      // Optional[\"HDFC Bank\"]\n```\n\n### UPI VPA\n\n```java\nimport io.github.levitasorg.validators.upi.VpaValidator;\n\nVpaValidator.isValid(\"user@okhdfcbank\");       // true\nVpaValidator.getPspName(\"user@okhdfcbank\");    // Optional[\"Google Pay (HDFC)\"]\n```\n\n### Aadhaar (DPDP-safe)\n\n```java\nimport io.github.levitasorg.validators.aadhaar.AadhaarValidator;\nimport io.github.levitasorg.validators.aadhaar.AadhaarMasker;\n\nAadhaarValidator.isValid(\"234123412346\");   // checksum verified\nAadhaarMasker.mask(\"234123412346\");          // \"XXXX-XXXX-2346\"\n```\n\n**Never log raw Aadhaar numbers.** Always mask first. The DPDP Act makes storage and logging of unmasked Aadhaar a compliance risk.\n\n## Why \"Levitas\"?\n\nLatin for \"lightness.\" Indian enterprise integration is heavy — compliance, validation, retries, more compliance. We lift that weight off your codebase so you can focus on what your product actually does.\n\n## Roadmap\n\n- [x] v0.1: Core validators (GSTIN, PAN, HSN, IFSC, UPI, Aadhaar)\n- [ ] v0.2: Spring Boot starter + Bean Validation annotations (`@ValidGstin`, etc.)\n- [ ] v0.3: Kotlin extensions\n- [ ] v0.4: Expanded DPDP compliance toolkit\n- [ ] v1.0: API stability guarantee\n- [ ] Future: `levitas-gstn` (GSTN API client), `levitas-aa` (Account Aggregator), `levitas-digilocker`\n\n## Contributing\n\nContributions welcome! Good first issues are tagged on GitHub. If you find an incorrect bank code, missing UPI PSP, or an edge case in any validator, please open an issue or PR. See CONTRIBUTING.md.\n\n## License\n\nApache License 2.0 — use it anywhere, including commercial products.\n\n## Disclaimer\n\nThis library performs format and checksum validation only. It does NOT verify whether an identifier is actually registered with GSTN, NPCI, UIDAI, or any other authority. For live verification, use the respective official APIs. Authors are not liable for any business decisions made based on validation results.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevitasorg%2Flevitas-validators","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flevitasorg%2Flevitas-validators","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevitasorg%2Flevitas-validators/lists"}