What This Document Covers
Ganji and samjae follow cycle rules. The 24 solar terms use a day-level approximation and an exception table; lunar conversion and no-spirit days use a lunar calendar table for 1900–2050. The same selected date gives the same calculated result, but supported ranges and errors differ by method. The home and almanac pages initially include shared date values generated on the server, then align them with today in Korean Standard Time in the browser. Personal inputs such as a selected date are not sent to a fortune-calculation server or external API.
Doing the arithmetic ourselves also means we can get it wrong. So this page records not only how each value is derived but what we compared it against, which years came out wrong and had to be corrected, and which quantities we still do not compute at all. A regression script re-checks the anchor values on every run, and the mismatches we found are kept in a visible correction table rather than quietly patched. We think stating exactly how far we verified - and where verification stops - is more honest than claiming accuracy outright.
Ganji - The Sexagenary Cycle and Julian Day Numbers
Ganji pairs one of ten Heavenly Stems with one of twelve Earthly Branches. Since the least common multiple of 10 and 12 is 60, the pairing completes a full turn after sixty steps - the sexagenary cycle. Applied to a year it is called the year pillar, to a month the month pillar, and to a day the day pillar.
The year pillar is easy. Subtract 4 from the Common Era year, then take the remainders modulo 10 and 12 for the stem and branch, because 4 CE was a Gapja year. For 2026: 2026 − 4 = 2022; 2022 mod 10 = 2, giving the stem Byeong (丙); 2022 mod 12 = 6, giving the branch O (午). Hence Byeong-O, the year of the Fire Horse.
The day pillar is not so simple. The Gregorian calendar layers a leap year every four years, an exception every hundred, and an exception to that exception every four hundred, so you cannot count the days between two dates from the date strings alone. The fix is to convert each date to a Julian Day Number (JDN) first. A JDN is a single running integer that has been incremented once per day since a reference day in 4713 BCE, so the difference between two JDNs is exactly the number of days elapsed. We use the Fliegel–Van Flandern algorithm for the conversion.
Julian Day conversion (Fliegel–Van Flandern)
a = floor((14 - month) / 12)
y = year + 4800 - a
m = month + 12a - 3
JDN = day + floor((153m + 2) / 5) + 365y
+ floor(y/4) - floor(y/100) + floor(y/400) - 32045All that remains is one anchor. We take 1 October 1949 as a Gapja day. Its JDN is 2433191, and adding 49 gives a number divisible by 60 with no remainder - landing exactly on position 0 of the cycle, which is Gapja. From then on, any date yields a number from 0 to 59 through (JDN + 49) % 60; that number modulo 10 gives the stem and modulo 12 gives the branch. With a single correct anchor, thousands of years in either direction follow without drift.
In Korean fate calculation the year does not turn on 1 January but at Ipchun, the beginning of spring. So before assigning a year pillar we compute that year's Ipchun date, and if the date falls before it we use the previous year's ganji instead. In 2026, 3 February still belongs to the Eulsa year; Byeong-O begins on 4 February. Many people assume the zodiac animal changes on New Year's Day, but the boundary used in saju is Ipchun.
| Stem | Yin / Yang | Element | Color |
|---|---|---|---|
| Gap (甲) | Yang (陽) | Wood (木) | Blue (靑) |
| Eul (乙) | Yin (陰) | Wood (木) | Blue (靑) |
| Byeong (丙) | Yang (陽) | Fire (火) | Red (赤) |
| Jeong (丁) | Yin (陰) | Fire (火) | Red (赤) |
| Mu (戊) | Yang (陽) | Earth (土) | Yellow (黃) |
| Gi (己) | Yin (陰) | Earth (土) | Yellow (黃) |
| Gyeong (庚) | Yang (陽) | Metal (金) | White (白) |
| Sin (辛) | Yin (陰) | Metal (金) | White (白) |
| Im (壬) | Yang (陽) | Water (水) | Black (黑) |
| Gye (癸) | Yin (陰) | Water (水) | Black (黑) |
The color names attached to each year come straight out of this table. 2026 is called the year of the Red Horse because the stem Byeong (丙) carries the color red and the branch O (午) is the horse. 2024 worked the same way: Gap (甲) is blue and Jin (辰) is the dragon, hence the Blue Dragon. There is nothing mystical about the naming - it is two cells read off a table.
The 24 Solar Terms - The Shouxing Formula and Its Correction Table
The 24 solar terms mark each 15-degree step of the Sun along the ecliptic. They follow the solar calendar, independently of the Moon, so their Gregorian dates stay close from year to year. Exact transition times require astronomical calculations. This site uses an approximate date formula, which needs comparison and correction against published dates.
We use the Shouxing formula, which derives the entry date from one constant per term plus a leap-year correction.
Shouxing formula - solar term entry date
D = floor(Y × 0.2422 + C) - L Y = last two digits of the year (2026 → 26) C = constant per term, per century (Ipchun, 21C = 3.87) L = floor(Y / 4) (leap correction) ※ For January and February terms, L = floor((Y - 1) / 4)
The exception for January and February terms - Sohan, Daehan, Ipchun and Usu - has a simple cause: that year's 29 February has not yet passed, so the leap correction must lag by one year. The constant C comes in a 20th-century and a 21st-century variant, and differs for each of the 24 terms.
Take Ipchun 2026 as a worked example. Y = 26, the 21st-century constant for Ipchun is C = 3.87, and since it is a February term, L = floor(25 / 4) = 6. Then 26 × 0.2422 = 6.2972; adding 3.87 gives 10.1672; the floor is 10; subtracting 6 leaves 4. Ipchun 2026 falls on 4 February.
The Shouxing formula is an approximation and can differ by a day from the date in Korea Standard Time. Time zones also matter when a transition falls near midnight. We apply corrections for the years we have checked; we have not verified every year.
We checked all 24 terms in each of the official 2026 and 2027 calendar notices issued by the Korea AeroSpace Administration. After adding one day for Mangjong 2026, Sanggang 2027, and Ipdong 2027, all 48 dates match. Separately, all 24 dates for 2028 match KASI’s preliminary calendar data; this is not verification against a final calendar notice. For 2029, the autumn equinox is a single checked sample: 23 September in the US Naval Observatory’s UTC+9 calculation.
| Year | Term | Approximation | Published | Correction |
|---|---|---|---|---|
| 2026 | Mangjong (芒種) | 5 Jun | 6 Jun | +1 day |
| 2027 | Sanggang (霜降) | 23 Oct | 24 Oct | +1 day |
| 2027 | Ipdong (立冬) | 7 Nov | 8 Nov | +1 day |
The Korean dates are 19 February for Usu 2026, 21 June for Haji 2028, and 23 September for Chubun 2029. We removed erroneous minus-one-day adjustments from those three entries. The checked dates are recorded in regression tests. Finding one-day differences in these samples does not establish a one-day maximum error for all other years.
Sources used for the comparison
- Official 2026 calendar notice — KASA Notice 2025-0044
- Official 2027 calendar notice — KASA Notice 2026-0078
- KASI preliminary 2028 calendar data — before the official notice
- USNO 2029 calculation — UTC+9, autumn equinox sample only
Lunar Conversion - The 1900-2050 Reference Table
The lunar calendar follows the moon's synodic cycle, so no single tidy formula covers it. A month may run 29 or 30 days, and twelve of them fall short of a solar year, which forces an intercalary month every few years. Rather than approximate, we use a reference table covering the 151 years from 1900 to 2050.
The table compresses each year into a single 17-bit integer. The low four bits hold the number of the leap month, with 0 meaning there is none. The twelve bits above them mark whether each month from the first to the twelfth is a long month of 30 days or a short one of 29. The final bit says whether the leap month itself runs 30 days. The epoch is 31 January 1900 in the solar calendar, which is the first day of the first lunar month of 1900. Given a solar date, we count the days elapsed since the epoch and walk down the table to recover the lunar year, month, day and leap-month status.
The hazard of a table is that one wrong value pushes everything after it out of alignment. So the regression suite re-checks thirteen anchors on every run: six Lunar New Year dates (the first day of the first lunar month) and seven Chuseok dates (the fifteenth day of the eighth). It also verifies that advancing one solar day always advances the lunar date by exactly one, that leap months sit where the table says they do, and that dates outside the covered range return an empty value rather than a fabricated one.
That check has actually caught an error. The long/short month bits for 1978 and 1996 were wrong, and the symptom was that Chuseok in both years came out on the sixteenth day of the eighth lunar month instead of the fifteenth. To confirm the cause we computed the new-moon instants independently using Meeus's astronomical algorithms and compared. The September 1996 new moon fell more than eight hours away from midnight Korean time, so this was not a borderline rounding call - the table values themselves were wrong. In both years the annual day count was unchanged, so the boundaries with adjacent years did not move. The real lesson was that our anchors were clustered in recent years and had been blind to a decades-old error, so we extended them back to 1978.
Son-eomneun-nal ("days without the spirit") are then determined from that lunar date. A day qualifies when the lunar day number ends in 9 or 0 - that is, the 9th, 10th, 19th, 20th, 29th and 30th. Tradition holds that the son, a directional spirit, spends a ten-day cycle moving two days each through east, south, west and north, then ascends to the heavens for the remaining two days and stops meddling in human affairs. The test itself is a single modulo operation, but it is only as right as the lunar conversion feeding it. In practice, the reliability of our no-spirit-day calendar is the reliability of the lunar table.
Samjae - Determining It from the Zodiac Trines
Samjae is a folk belief that every twelve years, each zodiac sign passes through three consecutive years calling for caution. The rule itself is unambiguous. The twelve signs are grouped into trines by stepping four places at a time, giving four groups of three, and each group has a fixed set of three years in which samjae falls.
Those three years are named in order: deul-samjae for the year it enters, nul-samjae for the year it lingers, and nal-samjae for the year it leaves. Our code stores the four group mappings as a table and determines the phase from the position of the queried year's branch within that list.
| Trine group | Signs | Samjae years |
|---|---|---|
| Sin-Ja-Jin (申子辰) | Monkey · Rat · Dragon | Tiger, Rabbit, Dragon years (In-Myo-Jin) |
| Sa-Yu-Chuk (巳酉丑) | Snake · Rooster · Ox | Pig, Rat, Ox years (Hae-Ja-Chuk) |
| In-O-Sul (寅午戌) | Tiger · Horse · Dog | Monkey, Rooster, Dog years (Sin-Yu-Sul) |
| Hae-Myo-Mi (亥卯未) | Pig · Rabbit · Sheep | Snake, Horse, Sheep years (Sa-O-Mi) |
Someone born in 1995, for instance, is a Pig and therefore belongs to the Hae-Myo-Mi group, so their samjae window is the Snake, Horse and Sheep years - 2025, 2026 and 2027. Since 2026 is the second of the three, it is nul-samjae. The regression suite includes this case and checks that for any birth year the window always comes out as three consecutive years, recurring every twelve.
Samjae is different in kind from ganji, solar terms and lunar dates, though. Those are calendrical rules with a right answer. There is no confirmed evidence that samjae actually brings misfortune. What we can vouch for is that the traditional rule has been applied correctly - not that the rule predicts anything. If a result tells you that you are in samjae, we would rather you treat it as a nudge to start the year a little more carefully than as something to fear.
Choosing Fortune Text - Deterministic Hash Seeding
From here on we leave the calendar behind and enter the content layer. The sentences shown by the daily fortune or the zodiac readings are drawn from pools we wrote in advance. How they are drawn matters as much as what is in them.
Date-based tools such as Daily Fortune use a fixed seed so the same input and selected date return the same text. Weekly, monthly, and New Year tools use their selected period; name compatibility uses its name-based calculation rules. Interactive tarot uses a separate rule: choosing cards from a shuffled deck.
The basic daily-fortune procedure has two steps. Join the inputs and date using a separator, convert them to an integer with the FNV-1a 32-bit hash, then use it as the seed for mulberry32. The same seed produces the same sequence, reproducing the selected text and supporting results. Other tools use the input combinations and score formulas described on their own pages.
The deterministic selection procedure
seed = fnv1a(inputs + "|" + "YYYY-MM-DD") rng = mulberry32(seed) sentence = pool[floor(rng() × pool.length)] rating = derived from the sentence's own tone value
Daily fortunes recalculate when the browser’s local date changes; weekly and monthly tools remain fixed for the selected period. Interactive tarot uses Math.random to shuffle the deck and takes the chosen cards as the result, so reshuffling can change it. Orientations use a hash of date, pick order, and card ID. Share addresses preserve the selected cards and orientations. Daily Tarot is a separate tool whose three candidate cards are fixed by date.
There is a useful side effect. Because a result needs only the input and date, the fortune calculation does not need to identify a visitor or remember an earlier visit. Raw names, full birth dates, and birth years are calculated in the browser and excluded from servers, share URLs, Google Analytics, and advertising requests.
The pools themselves are sized as follows. Every sentence exists in both Korean and English, and each expansion batch was written separately so that it would not repeat the subject matter or sentence shapes of the original set.
| Pool | Entries | Composition |
|---|---|---|
| Daily fortune - overall | 200 | 50 base + 150 expansion, across four tones: great, good, soso, caution |
| Money · Love · Health · Work | 100 each | 30 base + 70 expansion per category, 400 in total |
| Chinese zodiac readings | 720 | 12 animals × (daily, weekly, monthly) × 20 |
| Western horoscope readings | 720 | 12 signs × (daily, weekly, monthly) × 20 |
| Tarot cards | 78 | 22 major + 56 minor, with separate upright and reversed readings |
The daily, zodiac-animal, and horoscope text shown in this table totals 2,040 entries (200 + 400 + 720 + 720). Including name compatibility, New Year fortunes, and upright/reversed tarot interpretations, the content validation scope contains 2,500 entries as of September 29, 2026. These totals cover different scopes. Tarot artwork uses SVG and CSS; that calculation and artwork path is separate from optional Google analytics and advertising requests.
Limits and Caveats
If we are going to talk about accuracy, the honest place to start is with what we cannot do. These are the limits we currently know about.
We do not compute the moment a term begins
Solar terms are given as dates only; we do not derive the hour and minute of entry. If you need the hour pillar, or need to settle which side of a term boundary a specific time falls on, the values here are not sufficient on their own.
The official calendar is KASI's
Our figures are for reference. For anything that has to be officially correct - public holidays, exact solar term times, substitute holidays - please follow the almanac published by the Korea Astronomy and Space Science Institute.
Lunar lookups run from 1900 to 2050
Dates outside the table's range return an empty value rather than an estimate, so the lunar field simply appears blank. We judged that leaving a gap visible is more honest than filling it with something plausible.
Check the time basis for each tool
Daily fortune and Daily Tarot date keys use the browser’s local date. This differs from the Korean calendar basis used for almanac and solar-term calculations. Results can differ across devices in different time zones.
The readings are for entertainment
Calculating accurately and interpreting correctly are entirely different claims. Ganji, solar terms and lunar dates are rule-bound calendrical facts with right answers; reading personality or the future out of those values has no scientific basis. For decisions that matter - health, money, legal matters - please consult a qualified professional.
Frequently Asked Questions
Sometimes your result differs by a day from another almanac site. Why?
Solar-term dates use an approximation and can differ by a day when the actual transition is near midnight. The almanac year pillar changes at Lichun; tools accepting only a birth year use separate simplified zodiac rules. The almanac uses Korea Standard Time for today, while daily fortune date keys use the browser’s local date. Check each tool’s basis and report the page and queried date if a result differs.
Doesn't skipping external APIs make the values less accurate?
Accuracy is decided by what you compared against, not by whether an API was involved. Ganji is pure modular arithmetic over Julian Day Numbers, a fixed integer system, so a single correct anchor keeps it from drifting. Solar terms come from an approximation that can err, which is exactly why we compare against KASI's published dates and correct the years that disagree. Lunar dates use a widely adopted reference table, held in place by regression tests against thirteen Lunar New Year and Chuseok anchors - tests that did in fact catch table errors in 1978 and 1996. What we do not claim is that ranges we have not compared are flawless.
If two people enter the same birth date, do they get the same fortune?
Yes. The same input in the same tool produces the same result on a given day because the seed is derived from the input and date. That is a deliberate design choice. It needs no account or server-side memory, and raw names, full birth dates, and birth years are calculated on-device and excluded from servers, URLs, and Google requests.
Does refreshing the page change my fortune?
Daily fortunes remain the same for a given input and date; weekly and monthly results follow their period. Interactive tarot can change after reshuffling and selecting again. Refreshing a share link preserves the selected cards and orientations.
Which sources verify the solar-term correction table?
We checked all 48 dates in the official 2026 and 2027 calendar notices, then added one day for Mangjong 2026, Sanggang 2027, and Ipdong 2027. All 48 dates match after correction. Separately, we checked 24 dates in KASI’s preliminary 2028 data and one 2029 autumn-equinox date from USNO in UTC+9. Final official notices, preliminary data, and a single sample are different levels of verification. We do not guarantee dates in years we have not checked.
Where is the birth date or name I entered stored?
Raw names, full birth dates, and birth years are not stored. Fortune and almanac calculation modules run in your browser without calling an external API, and raw inputs are excluded from servers, address bars, share links, and Google requests. The separate visit, device, advertising, and cookie data that Google Analytics or AdSense may process is described in the Privacy Policy.
This content is for entertainment purposes only. For important decisions, consult a professional.