Czech rodné číslo check
Enter 7401040020 and see that it is valid: a man born on 4 January 1974, with the whole number divisible by 11. The tool reads the date and gender, checks that the day exists and flags impossible codes before they reach a form. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Number
- 7401040020
- Input
- 7401040020
- Birth number
- 740104/0020
- Birth date
- 1974-01-04
- Year
- 1,974
The Czech and Slovak rodné číslo (birth number) packs a date of birth, a gender hint, and a short serial into nine or ten digits. Registries, HR imports, banking KYC, and healthcare systems still receive these strings with optional slashes, mistyped months, and failed check digits. This capability accepts a pure digit string or the common YYMMDD/serial form, decodes male and female month offsets (including the +20 and +70 ranges used when daily sequences run out), verifies that the resulting calendar day exists, and—for modern ten-digit numbers—requires the whole integer to be divisible by eleven. Nine-digit numbers are treated as pre-1954 forms without a mod-11 digit.
How Czech and Slovak rodné číslo encoding works
A rodné číslo begins with six digits that encode the birth date as year, month, and day in two-digit fields, followed by a three-digit serial for births before 1954 or a four-digit serial for later births.
The year is two digits only: nine-digit numbers always mean nineteen hundred plus YY and are legal only when that year is before 1954; ten-digit numbers map YY greater than or equal to fifty-four to nineteen hundred plus YY and smaller YY values to two thousand plus YY, matching the introduction of the ten-digit form in 1954.
Gender is not a separate character: men use month codes one through twelve, or twenty-one through thirty-two when twenty is added to free extra serials; women use fifty-one through sixty-two (month plus fifty) or seventy-one through eighty-two (month plus seventy). After stripping those offsets you obtain a calendar month from one to twelve and must still confirm that the day exists for that month and year, including leap-year February twenty-nine. The optional slash that people write after the day—YYMMDD slash serial—is presentation only; validation works on the digit body.
For every ten-digit number the official control rule is simple modular arithmetic: interpret all ten digits as a single integer and require that integer to be divisible by eleven with zero remainder. Nine-digit historical numbers have no trailing check digit, so once the date and length rules pass they are reported valid under this capability.
Where rodné číslo validation fits real product workflows
Czech and Slovak onboarding flows in fintech, insurance, e-commerce, and public-sector portals often collect a rodné číslo early; validating structure and mod-11 on blur reduces failed submissions and support tickets without calling a national registry for every keystroke. Payroll and HR systems that import employee CSVs should quarantine rows whose month code is impossible or whose ten-digit integer is not divisible by eleven, catching both human edits and off-by-one bugs in upstream generators. Data-quality jobs re-check every birth-number column in an export and flag mismatches before fiscal or social-security reporting.
Do not treat a passing mod-11 and date check as proof that the person exists in Czech or Slovak population systems, that the number is active, or that you are allowed to process the identifier under GDPR and local privacy law—it only proves the string is arithmetically and calendrically well formed under the rodné číslo rules. Always minimize retention, encrypt at rest, and process birth numbers only when a lawful purpose exists.
FAQ
What is a Czech or Slovak rodné číslo?
Ten-digit forms must be divisible by eleven; nine-digit forms apply to births before 1954.
How is gender encoded in the month field?
Men use months 01–12 or 21–32; women use 51–62 or 71–82. The capability subtracts the official offset and returns gender male or female with the calendar month.
Is the Czech rodné číslo check free?
The browser tool is free and runs locally.
How does the mod-11 check work for a rodné číslo?
For a ten-digit number, read all ten digits as one whole number and divide it by 11. If nothing is left over, the check passes. 7401040020 divides exactly, so it is valid.
How is the century of the birth year decided?
Only two digits of the year are stored. In a ten-digit number, values of 54 or more mean the 1900s and smaller values mean the 2000s. A nine-digit number always means the 1900s and is only valid for births before 1954.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/enc/rodne-cislo \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"7401040020"}'const res = await fetch("https://api.kit.forhosting.com/enc/rodne-cislo", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "7401040020"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/rodne-cislo",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "7401040020"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/rodne-cislo", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"7401040020"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"7401040020"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/rodne-cislo", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"number": "7401040020"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.rodne_cislo",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Success returns a boolean valid flag, an ISO birth_date, gender, year, month, day, length, mod11_ok, and a normalized birth_number with the slash after the day. Malformed length, non-numeric characters, impossible dates, and out-of-range month codes fail with invalid_input and are not billed. The same pure arithmetic powers the free browser tool and the API, so form gates and batch audits never disagree on a checksum edge case.
How Czech and Slovak rodné číslo encoding works
The response always labels the algorithm as rodne_cislo so logs can distinguish it from Brazilian CPF mod-11, Dutch BSN eleven-test, Luhn, or ISO 7064 schemes used in other enc.* tools.
Input contract, response shape, and error behaviour
Length must be nine or ten digits after normalization; any other length is rejected before date logic runs. Failed validation tasks are not billed. POST a JSON body with a required number field that holds the birth number as digits only, or with a single optional slash after the six date digits. Spaces around the slash are ignored; other punctuation, letters, and mixed separators fail as non-numeric invalid_input so a form never accepts a silently rewritten value—strip formatting in your client if users paste masked strings. Month codes outside the four legal ranges, day fields outside one through thirty-one, days that do not exist in the decoded month (for example thirty-one April or twenty-nine February in a non-leap year), nine-digit numbers whose year would be nineteen fifty-four or later, and ten-digit numbers whose century rule would place the birth before nineteen fifty-four all fail with invalid_input naming the problem. Ten-digit numbers with a correct date but a failed mod-11 check return valid false and mod11_ok false while still exposing birth_date, gender, and the normalized birth_number so a UI can show what was parsed without inventing a corrected digit. The payload also echoes input as pure digits, year, month, day, length, and algorithm. Because the path is pure parse with no clock, random source, or network, the same input always yields the same JSON on the free browser tool and on the API at $0.002 per successful call.
Where rodné číslo validation fits real product workflows
Healthcare and pharmacy systems that key patients by birth number can block proceed until valid is true and still display the decoded ISO birth_date for operator confirmation.
Integration use cases
Validate typed birth numbers on signup
When a Czech or Slovak form collects a rodné číslo, call this check on blur and block storage when valid is false or the request fails with invalid_input.
Audit HR and payroll CSV imports
Batch-validate every birth-number column, quarantine impossible month codes and failed mod-11 rows, and keep the decoded birth_date for operator review.
Normalize display for operators
Accept digits or slash form, return birth_number as YYMMDD/serial plus ISO birth_date and gender so support tools show a consistent layout.
Technical questions
How do I validate a rodné číslo with this API?
POST with number set to nine or ten digits, or YYMMDD/serial with an optional slash. The response includes valid, birth_date, gender, mod11_ok, and a normalized birth_number.
What happens with letters, wrong lengths, or impossible dates?
Non-numeric input, lengths other than nine or ten, illegal month codes, and days that do not exist in the decoded month fail with invalid_input and are not billed.