Accuracy and data

Where every embedded data table comes from, what we compared it with and when, and what each result means. Read it before you rely on the results in production.

On this page
  1. Our principle
  2. The two-source rule
  3. The data tables
  4. What we checked, feature by feature
  5. Prayer times: what each method was compared with
  6. Data tables: the check of 2026-10-08
  7. Good to know

Our principle#

RTLY-Kit has no runtime dependency, so its reference data lives inside the package. Most of this data has no official machine-readable source, so we built it from public pages. This page lists those sources, says what we compared with what, and gives the date of each check. We prefer an official source whenever we can reach one.

Good to know. We looked at sources on 2026-10-07 and 2026-10-08. Banks merge, operators change ranges and moon sightings differ, so any table can age. The data is best-effort and is not an official registry. For legal or financial decisions, use an official source as well.

The two-source rule#

A bank card BIN, a Sheba bank code or a national-code prefix is included only when at least two independent sources agree. An entry found in one source, or where sources disagree, is left out. So a missing entry means "unknown" and never "invalid". A valid card can come back with getBankName() equal to null. Some community datasets share a common origin, so we treat their agreement as strong but not fully independent. We took only facts (numeric ranges and the names they map to), and copied no source text or code.

The data tables#

DataSizeBased onWhat we checked
Bank card BINs (BankCard::getBankName())39 BINstwo agreeing sources among masihgh/iranian-bank-list, ekhtebar.ir, bankavl.com, with spot checks against ircards and iranian_banksOn 2026-10-08 every BIN appeared on at least one of three public pages (ekhtebar.ir, bankavl.com, pishkhanak.com) with the same bank. BIN 585983 (Tejarat) is also confirmed by the bank's own announcement of 3 Khordad 1395, as reported by two news sites. The card check itself is the Luhn checksum and does not use this table
Sheba bank codes (Sheba::getBankName())38 codespersian-tools dataset (via iranian-sheba), pishkhanak.com, bankavl.com, nabzebourse.com, salambank.netThe national IBAN specification of the Central Bank of Iran (list dated 2017, read from the Internet Archive) has 19 bank identifiers, and all 19 match our table. It also settles code 051: the credit institution Tose'e. Every other code is held by at least two public pages. The IBAN check itself is ISO 7064 mod-97-10
National-code place of issue (NationalCode::getLocation())547 prefixesthree community datasets must agree on province and city (persian-tools, Iranian-national-code-generator, node-iranian-ssn). A fourth (iran-lib) can only vetoNo official list exists. The prefix is the place of issue, not of birth or residence. Other prefixes return null
Mobile prefixes (Mobile)38 operator prefixespublic prefix lists (en.wikipedia, fa.wikipedia, digiato.com, rondbaz.com, virgool.io and others) and the pages of Irancell, Aptel and Shatel MobileThe national numbering plan that the Communications Regulatory Authority filed with the ITU on 24 August 2026 lists the mobile blocks. Every prefix we map lies inside one of them, and Mobile::isAllocated() uses that list. The plan names no operators, so operator names rest on the public tables
Umm al-Qura month table (Hijri)AH 1300 to 1500 (1882-11-12 to 2077-11-16)the ICU/CLDR islamic-umalqura calendar data. Only the resulting month lengths are embeddedEvery month start from AH 1318 to AH 1500 matches the official KACST Umm Al-Qura calendar (ummulqura.org.sa, city Mecca), checked on 2026-10-08: 183 years, 2196 month starts, no difference. The official site does not offer AH 1300 to 1317, which rest on the ICU/CLDR data
Official holiday dates (HolidayCalendar)Jalali years 1380 to 1405the yearly calendar of the Calendar Center at the University of Tehran, and time.ir. For 1395, a news list of the official holidays1394 and 1396 to 1405 are official: the University of Tehran table and a second source agree. 1380 to 1393 and 1395 are reported: dates from one published source
Prayer-time constants6 methods, 14 built-in citiesMeeus Astronomical Algorithms and the NOAA solar equations, published method angles, approximate public city coordinatesSee the per-method list below

The data lives in resources/data/*.php and is not public API. Its contents can be corrected in any release (see API stability). Details and links are in resources/data/SOURCES.md in the repository.

What we checked, feature by feature#

FeatureWhat we checkedNotes
Jalali conversionThe arithmetic 33-year rule gives the Nowruz date and the leap years of the official calendar of the University of Tehran for every year from 1206 to 1497 (293 Nowruz dates read from the official table). It agrees with the astronomical definition for every year from 1178 to 1502. It also matches morilog/jalali on every day from 1900-01-01 to 2099-12-27 (73,000 days)Outside 1178 to 1502 there is no official definition, so the library keeps the fixed rule. For those years the rule is an approximation
Hebrew calendarKnown-answer tests for Rosh Hashanah 5783 to 5787 and for round trips with Gregorian datesPure arithmetic calendar
Hijri (Umm al-Qura)Every month start of AH 1318 to 1500 against the official KACST calendar. Anchors: 1 Ramadan 1446 = 2025-03-01, 1 Muharram 1447 = 2025-06-26, 1 Shawwal 1445 = 2024-04-10Hijri::ummAlQuraVerifiedRange() returns [1318, 1500]. AH 1300 to 1317 use ICU/CLDR data. Outside AH 1300 to 1500 and for HijriVariant::Tabular the date is arithmetic and can differ from observation by a day or two
Iranian holidaysFixed Jalali holidays are exact. Islamic holidays use the official dates for 1394 and 1396 to 1405, reported dates for 1380 to 1393 and 1395, and the Umm al-Qura estimate for other yearsAn estimate can differ from the announcement by one or two days. HolidayCalendar::sourceOf() tells you which source a year uses
ValidatorsThe national-code, Luhn and mod-97 checksums are public algorithms covered by known-answer testsBank, operator and place names come from the tables above
Arabic number wordsKnown-answer tests. The forms follow grammar sources that are cited in the project notesA few outputs await review by a native speaker. See Arabic number words

Prayer times: what each method was compared with#

The calculation is written from standard equations. The useful outside check is to compute a city and a date and compare with a timetable that the authority itself publishes. We allow the minute rounding of both sides (the tests accept plus or minus 2 minutes). We do not count aggregator websites, because they use the same published angles. All comparisons were done on 2026-10-08.

MethodCompared withResult
Tehran (Fajr 17.7, Maghrib 4.5)Institute of Geophysics, University of Tehran, tables for 1405: Tehran, Mashhad, Isfahan and Shiraz on four datesFajr, sunrise, Dhuhr and Maghrib agree within 1 minute. A council member of the Institute states the 17.7 and 4.5 degree angles. The tables have no Isha and no Asr column
Makkah (Fajr 18.5, Isha 90 min, 120 in Ramadan)Umm Al-Qura Calendar, five dates outside Ramadan and two in Ramadan 1447All six times agree within 1 minute
Egypt (19.5 / 17.5)Dar al-Ifta, Cairo, six dates in October 2026All six times agree within 1 minute
MWL (18 / 17)Turkey, Diyanet: Istanbul, Ankara and Izmir, four dates between 8 October and 7 November 2026The published imsak and yatsi agree with our Fajr and Isha within 1 minute, so they fit the same twilight angles. The other Diyanet columns differ from plain astronomical times by steady offsets of several minutes that the pages do not explain, so we do not count them
Karachi (18 / 18) with Hanafi AsrJamia Uloom-e-Islamia Allama Banuri Town, Karachi: all 31 days of October 2026Fajr, sunrise, Asr, sunset and Isha agree within 1 minute, exactly on most days. Darul Uloom Deoband states the Hanafi rule (shadow of twice the height) that we use
Karachi (18 / 18)Malaysia, JAKIM e-solat, zone SGR01: four dates in October 2026Fajr and Isha differ by 1 to 2 minutes, which fits 18 / 18 angles
ISNA (15 / 15)Fiqh Council of North AmericaThe Council names 15 degrees for both Fajr and Isha for the setting that corresponds to ISNA

Sunrise and sunset agree with the NOAA Solar Calculator within one minute (12 city and date pairs). High latitudes, elevation and the Tehran Isha and Asr were checked against independent calculations and not against a published table. The Makkah Ramadan rule follows the civil date and not the Islamic day that starts at sunset. Different authorities use different angles, so pick the method your users follow.

Data tables: the check of 2026-10-08#

We compared the tables with public pages and, where we could reach them, with official documents.

  • Bank BINs. All 39 BINs appear on public pages, and no page names a different bank. No official BIN registry could be reached.
  • Sheba codes. The 19 codes in the Central Bank specification match our table. The other codes are held by at least two public pages each, and the weakest is 090.
  • Mobile prefixes. Every prefix lies inside a block that the numbering plan lists for mobile service. Number portability means a prefix never proves the current operator.

Good to know#

Good to know. (1) Hijri months for AH 1300 to 1317 come from ICU/CLDR data, which the official site cannot confirm. (2) Iranian Islamic holidays can differ from the announcement by one or two days in estimated years. (3) Bank, Sheba, operator and national-code tables come from public lists. They are consistent with each other and with the official documents named above, and they can age. (4) We found no timetable issued by the University of Islamic Sciences in Karachi, by ISNA or by the Muslim World League, and no official Tehran table with Isha and Asr. (5) A few Arabic number-word outputs await review by a native speaker.

Found a mistake? Please open an issue on GitHub and include a source. A good source is the quickest way to get a table corrected.