Methodology
How this calculator decides what your chart is
Most BaZi sites disagree with each other about the rules — and it is usually impossible to tell which ones a given chart used. So we publish ours. This page states the engine version, every convention in force, and a worked example you can reproduce yourself.
The short version
Your chart is produced by a deterministic engine — not by a language model. The same engine version, given the same birth details, always returns the same eight characters. The AI writes prose about the chart; it never computes it.
The engine
The chart engine is written for this site and versioned like software: engine v1.1.0. Every chart you calculate and every report you order carries the version that produced it, so a result can always be traced back to the rules that generated it.
Underneath, the astronomical calendar data comes from lunar-javascript 1.7.7 — solar-term instants, lunar dates, IANA time zones and historical daylight-saving offsets. Everything above that layer — the pillar sequencing, the five-element tally, the ten-god relationships, the luck-pillar derivation — is ours.
There is no randomness anywhere in the pipeline. Two people with identical birth data, entered into the same engine version, get identical charts — which is what makes the worked example below checkable.
Conventions in force
These are applied to every chart, in this order. Where schools of practice differ, we say which side we take rather than quietly picking one.
- Year pillar
- Changes at the exact astronomical moment of 立春 (Start of Spring) — never on 1 January.
yearBoundary: lichun-exact-moment- Month pillar
- Changes at each of the 12 节 (立春, 惊蛰, 清明, 立夏, 芒种, 小暑, 立秋, 白露, 寒露, 立冬, 大雪, 小寒) — not at the lunar month start, and not at the 12 中气.
monthBoundary: jie-exact-moment- Day pillar
- Changes at midnight (00:00) local solar time.
dayBoundary: midnight- Late 子 hour (23:00–23:59)
- The day pillar stays on the current date, but the hour stem is taken from the next day’s day stem (晚子时).
lateZiHourStem: next-day-stem- Time basis
- True solar time by default — your clock time is corrected for longitude and the equation of time. You can switch it off.
defaultTimeBasis: true-solar-time- Luck pillars 大运
- Step from the month pillar in sixty-cycle order. Start age = days from birth to the nearest 节 ÷ 3 (three days = one year).
qiYunBasis: birth-to-jie-days-over-3- Luck pillar direction
- Yang year + male and Yin year + female count forward; the other two combinations count back. Gender left blank is treated as male.
luckPillarDirection: yang-male-forward- Calendar tables
- lunar-javascript 1.7.7 — astronomical solar-term times, IANA time zones, historical DST offsets.
engine.library
A worked example, to the minute
This case is chosen because it sits on a knife edge. Enter it yourself and you should get the same eight characters on any engine v1.1.0 build.
Input
- Date
- 4 Feb 1990
- Time
- 10:00
- Place
- Taipei, Taiwan
- Time zone
- Asia/Taipei
- True solar time
- off
Nearest 节
Previous: 大寒, 20 Jan 1990 16:01
Next: 立春, 4 Feb 1990 10:14
Year 年
己巳
Jǐ Sì
Direct Seal 正印
Month 月
丁丑
Dīng Chǒu
Direct Officer 正官
Day 日
庚子
Gēng Zǐ
Day Master · Yang Metal
Hour 时
辛巳
Xīn Sì
Rob Wealth 劫财
Five-element tally
a straight count of the eight characters
Why this example — the fourteen-minute year
立春 fell at 10:14 that morning. This birth is at 10:00 — fourteen minutes earlier.
Move the birth time to 10:20 and the chart changes at the top: the year pillar becomes 庚午 instead of 己巳, the month pillar becomes 戊寅 instead of 丁丑, and because the year stem flips from Yin to Yang, the luck pillars reverse direction — from counting back through 小寒 to counting forward through 惊蛰.
This is what “the year doesn’t start on 1 January” actually costs. Any calculator that assigns the year pillar by calendar date gets this chart wrong, and gets it wrong silently.
The same chart’s luck cycles, computed — not drawn
Everything below is this example’s own output: eight ten-year luck pillars stepping from its month pillar 丁丑, overlaid with one hundred annual pillars from 1990. Because the year stem is 己 (yin) and no gender was given, the engine takes the yin-year default and counts the luck pillars backwards through 小寒 — which is why the first block runs 丙子, 乙亥, 甲戌 rather than forward.
Luck pillars and annual pillars · 大运流年
100 annual pillars · scroll sideways →
Before 起运
1990–1998
庚午
1990
辛未
1991
壬申
1992
癸酉
1993
甲戌
1994
乙亥
1995
丙子
1996
丁丑
1997
戊寅
1998
ages 10–19 · Seven Killings
己卯
1999
庚辰
2000
辛巳
2001
壬午
2002
癸未
2003
甲申
2004
乙酉
2005
丙戌
2006
丁亥
2007
戊子
2008
ages 20–29 · Direct Wealth
己丑
2009
庚寅
2010
辛卯
2011
壬辰
2012
癸巳
2013
甲午
2014
乙未
2015
丙申
2016
丁酉
2017
戊戌
2018
ages 30–39 · Indirect Wealth
己亥
2019
庚子
2020
辛丑
2021
壬寅
2022
癸卯
2023
甲辰
2024
乙巳
2025
丙午
2026
丁未
2027
戊申
2028
ages 40–49 · Hurting Officer
己酉
2029
庚戌
2030
辛亥
2031
壬子
2032
癸丑
2033
甲寅
2034
乙卯
2035
丙辰
2036
丁巳
2037
戊午
2038
ages 50–59 · Eating God
己未
2039
庚申
2040
辛酉
2041
壬戌
2042
癸亥
2043
甲子
2044
乙丑
2045
丙寅
2046
丁卯
2047
戊辰
2048
ages 60–69 · Rob Wealth
己巳
2049
庚午
2050
辛未
2051
壬申
2052
癸酉
2053
甲戌
2054
乙亥
2055
丙子
2056
丁丑
2057
戊寅
2058
ages 70–79 · Companion
己卯
2059
庚辰
2060
辛巳
2061
壬午
2062
癸未
2063
甲申
2064
乙酉
2065
丙戌
2066
丁亥
2067
戊子
2068
ages 80–89 · Direct Seal
己丑
2069
庚寅
2070
辛卯
2071
壬辰
2072
癸巳
2073
甲午
2074
乙未
2075
丙申
2076
丁酉
2077
戊戌
2078
Before 起运
2079–2089
己亥
2079
庚子
2080
辛丑
2081
壬寅
2082
癸卯
2083
甲辰
2084
乙巳
2085
丙午
2086
丁未
2087
戊申
2088
己酉
2089
The chart’s luck cycles begin 9 years 10 months 0 days after birth (around 1999-12-04). The engine computes eight luck pillars; the annual pillars run a full hundred years from birth, so the years before 起运 and after the eighth block are shown for what they are rather than padded.
True solar time is on by default
Clocks follow time-zone boundaries; the sun does not. For the example above, switching true solar time on moves the working time from 10:00 to 09:52 — a total correction of −7.4 minutes, made of a longitude term of +6.3 and an equation-of-time term of −13.6.
Eight minutes rarely matters. But the hour pillar changes every two hours, so a correction of that size can move a birth across a boundary — and places far from their time-zone meridian drift by far more. We show the entered time, the corrected time, and both correction terms on every result, so you can always see what the engine did.
Verification
How the engine is checked
The engine ships with a self-test suite of 15 groups. It runs against published almanac anchors and against an independent implementation, not against our own assumptions.
- ANine external almanac anchors — known published charts reproduced exactly.
- BEvery lookup table (ten gods, hidden stems, Na Yin, element maps, zodiac) checked against the library’s own tables.
- CIndependent hour-stem derivation (五鼠遁) over a seeded case set.
- DDay pillar advances exactly one step per calendar day.
- EYear pillar switches precisely at 立春, sampled across 1900–2100.
- FMonth pillar switches at every 节, 2018–2027, plus year-stem derivation and the 春节 non-boundary case.
- GTrue solar time: equation of time, historical DST offsets, longitude correction, end-to-end charts.
- HUnknown-time degraded mode produces a correct three-pillar chart.
- IInput validation rejects out-of-range and malformed dates.
- JLuck pillars: direction rule, sixty-cycle stepping, and start age against an independent oracle.
- KAnnual pillars (流年) against the calendar and the library’s own year pillars; the branch-interaction tables checked for symmetry, coverage and the known overlaps.
- LSynastry (合盘): every cross-chart stem and branch pair derived from the same fixed tables, with the day-master relation read in both directions.
- MThe ten day-master pages: their example charts are pinned so the date sequence, day master, 立春 split and luck direction can never drift from what the pages claim.
- NZodiac pairing: the full 12×12 classification counted against the branch relations, checked for symmetry and for agreement with the tables shown on the site.
- ODefensive input: an omitted longitude must behave identically to an explicit null rather than silently producing NaN.
One known bug is worth stating publicly. The underlying calendar library classifies births between 23:00 and 23:59 as the previous hour branch; the correct classical treatment is the next day’s 子 hour. Our engine applies the correct rule, and the self-test suite exempts that specific case from the oracle comparison rather than quietly matching the library. We name it here so nobody has to guess which behaviour they are seeing.
Self-test status: 168 / 168 cases green · engine v1.1.0 · calendar lunar-javascript 1.7.7
When you don’t know your birth time
Your hour pillar depends on your birth time, so without it there is genuinely one column missing. We do not invent one. The chart is computed from local noon: the year, month, and day pillars remain correct, the hour pillar is left blank, and the result is labelled as a three-pillar chart.
Because the day pillar is anchored at noon, the day master — which every reading is built on — is still reliable. What you lose is the hour: the ten-god relationships that only the hour column can supply, and some precision in the start age of your luck pillars. Both limits are stated on the result itself.
What this engine does not claim
- It does not predict events. The conventions above are classical rules applied consistently; they are a model, not a forecast.
- It does not weight the five elements by season or month. The tally is a straight count of the eight characters — we say so rather than dressing it up as a strength score.
- It does not arbitrate between schools. Where traditions disagree — late 子 hour handling, luck-pillar direction for an unspecified gender — we declare which rule we follow, above.
- It is not medical, legal, or financial advice, and nothing here should be acted on as such.
Check it against your own chart
The calculator is free and needs no account. Every result shows its engine version and conventions, so you can hold it to everything on this page.
BaziPattern provides AI-generated readings for entertainment and cultural exploration purposes only. Readings are not predictions, or medical, legal, or financial advice.