{"id":37027211,"url":"https://github.com/vladislavgoltjajev/java-isikukood","last_synced_at":"2026-01-14T03:13:23.218Z","repository":{"id":57734133,"uuid":"138083402","full_name":"vladislavgoltjajev/java-isikukood","owner":"vladislavgoltjajev","description":"Library for working with Estonian personal identification codes (isikukood).","archived":false,"fork":false,"pushed_at":"2021-06-04T22:01:41.000Z","size":98,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-07-02T07:37:24.276Z","etag":null,"topics":["isikukood","java","java-isikukood","java8","parser","personal-code"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vladislavgoltjajev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-20T20:38:19.000Z","updated_at":"2021-06-04T22:01:44.000Z","dependencies_parsed_at":"2022-09-26T22:10:56.724Z","dependency_job_id":null,"html_url":"https://github.com/vladislavgoltjajev/java-isikukood","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/vladislavgoltjajev/java-isikukood","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladislavgoltjajev%2Fjava-isikukood","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladislavgoltjajev%2Fjava-isikukood/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladislavgoltjajev%2Fjava-isikukood/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladislavgoltjajev%2Fjava-isikukood/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vladislavgoltjajev","download_url":"https://codeload.github.com/vladislavgoltjajev/java-isikukood/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladislavgoltjajev%2Fjava-isikukood/sbom","scorecard":{"id":925341,"data":{"date":"2025-08-04","repo":{"name":"github.com/vladislavgoltjajev/java-isikukood","commit":"11ce442e8b4776fea700038105e732732ab9390f"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":2.9,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-25T11:21:19.978Z","repository_id":57734133,"created_at":"2025-08-25T11:21:19.978Z","updated_at":"2025-08-25T11:21:19.978Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"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":["isikukood","java","java-isikukood","java8","parser","personal-code"],"created_at":"2026-01-14T03:13:22.517Z","updated_at":"2026-01-14T03:13:23.212Z","avatar_url":"https://github.com/vladislavgoltjajev.png","language":"Java","funding_links":["https://www.paypal.me/VladislavGoltjajev"],"categories":[],"sub_categories":[],"readme":"# :exclamation::exclamation::exclamation: Library is no longer supported :exclamation::exclamation::exclamation:\nDevelopment moved to [this](https://github.com/vladislavgoltjajev/java-personal-code) repo.\n\n# java-isikukood\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/vladislavgoltjajev/java-isikukood/blob/master/LICENSE) \n\nExtract personal data from and generate Estonian personal identification codes (isikukood) with this lightweight library.\n\n## Import\nThe library is available on Maven Central and JCenter.  \nJDK 8 or higher is required for the library to work.\n### Gradle\n```groovy\ndependencies {\n    implementation 'com.github.vladislavgoltjajev:java-isikukood:2.1'\n}\n```\n### Maven\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.vladislavgoltjajev\u003c/groupId\u003e\n    \u003cartifactId\u003ejava-isikukood\u003c/artifactId\u003e\n    \u003cversion\u003e2.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Usage\n```java\npublic class Test {\n\n    public static void main(String[] args) {\n        EstonianId estonianId = new EstonianId(\"47508030046\");\n        boolean isValid = estonianId.isValid();                 // true\n        String gender = estonianId.getGender();                 // F\n        LocalDate dateOfBirth = estonianId.getDateOfBirth();    // 1975-08-03\n        Integer age = estonianId.getAge();                      // 43\n\n        EstonianId invalidEstonianId = new EstonianId(\"123\");\n        isValid = invalidEstonianId.isValid();                  // false\n        gender = invalidEstonianId.getGender();                 // null\n        dateOfBirth = invalidEstonianId.getDateOfBirth();       // null\n        age = invalidEstonianId.getAge();                       // null\n\n        String personalCode = EstonianId.generateRandomPersonalCode(); // 35207049817\n\n        try {\n            gender = EstonianId.MALE;\n            dateOfBirth = LocalDate.of(1984, 3, 15);\n            personalCode = EstonianId.generatePersonalCode(gender, dateOfBirth);           // 38403153949\n            personalCode = EstonianId.generatePersonalCode(gender, dateOfBirth, 7);        // 38403150076\n            personalCode = EstonianId.generatePersonalCode(\"A\", LocalDate.of(1799, 1, 1)); // Throws exception.\n        } catch (EstonianIdException e) {\n            // Handle exception.\n        }\n    }\n}\n```\n\n## API\n### Field summary\n\u003ctable class=\"table1\"\u003e\n    \u003ctr\u003e\n        \u003cth\u003eModifier and type\u003c/th\u003e\n        \u003cth\u003eField\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003estatic String\u003c/td\u003e\n        \u003ctd\u003eFEMALE\u003c/td\u003e\n        \u003ctd\u003eFemale gender classifier \"F\".\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003estatic String\u003c/td\u003e\n        \u003ctd\u003eMALE\u003c/td\u003e\n        \u003ctd\u003eMale gender classifier \"M\".\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Constructor summary\n\u003ctable class=\"table1\"\u003e\n    \u003ctr\u003e\n        \u003cth\u003eConstructor\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eEstonianId(String personalCode)\u003c/td\u003e\n        \u003ctd\u003eConstructs a new EstonianId object using the specified personal code.\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Method summary\n\u003ctable class=\"table1\"\u003e\n    \u003ctr\u003e\n        \u003cth\u003eModifier and type\u003c/th\u003e\n        \u003cth\u003eMethod\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003estatic String\u003c/td\u003e\n        \u003ctd\u003egeneratePersonalCode(String gender, LocalDate dateOfBirth)\u003c/td\u003e\n        \u003ctd\u003eGenerates a personal code using the specified gender and date of birth. Throws an exception if the gender is not \"M\" or \"F\" or the birth year is before 1800 or after 2099.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003estatic String\u003c/td\u003e\n        \u003ctd\u003egeneratePersonalCode(String gender, LocalDate dateOfBirth, int birthOrderNumber)\u003c/td\u003e\n        \u003ctd\u003eGenerates a personal code using the specified gender, date of birth and birth order number. Throws an exception if the gender is not \"M\" or \"F\", the birth year is before 1800 or after 2099 or the birth order number is less than 0 or more than 999.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003estatic String\u003c/td\u003e\n        \u003ctd\u003egenerateRandomPersonalCode()\u003c/td\u003e\n        \u003ctd\u003eGenerates a random personal code.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eInteger\u003c/td\u003e\n        \u003ctd\u003egetAge()\u003c/td\u003e\n        \u003ctd\u003eCalculates the person's age in years. Returns null if the personal code is invalid or the date of birth is in the future.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eLocalDate\u003c/td\u003e\n        \u003ctd\u003egetDateOfBirth()\u003c/td\u003e\n        \u003ctd\u003eReturns the person's date of birth. Returns null if the personal code is invalid.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eString\u003c/td\u003e\n        \u003ctd\u003egetGender()\u003c/td\u003e\n        \u003ctd\u003eReturns the person's gender (\"M\" or \"F\"). Returns null if the personal code is invalid.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eboolean\u003c/td\u003e\n        \u003ctd\u003eisValid()\u003c/td\u003e\n        \u003ctd\u003eReturns whether or not the personal code is valid.\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n## Buy me a beer? :beer:\nPlease [donate](https://www.paypal.me/VladislavGoltjajev) if you like my work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladislavgoltjajev%2Fjava-isikukood","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvladislavgoltjajev%2Fjava-isikukood","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladislavgoltjajev%2Fjava-isikukood/lists"}