Methodology: How We Calculate It
By Suraj Giri
Every tool on this site carries one of three labels: Game (a fixed formula on letters or answers, for fun), Tradition (follows a named system, not evidence), Research-informed (built on a named source, a self-reflection tool, not a diagnosis).
This page is the full record behind every "How we calculate it" box and every label on LoveCalculator.love: one section per tool, from the name game to the love compatibility quizzes, each with its rule, its pseudocode and its limits. If you have not met the people behind these formulas yet, start with about us.
What do the Game, Tradition and Research-informed labels mean?
Every scored tool carries exactly one of these labels under its heading and on its result screen.
- Game: this score comes from a fixed formula on the letters or answers you enter. It is for fun and cannot tell you anything about a real relationship.
- Tradition: this result follows a named system (Western astrology, Vedic astrology, Pythagorean numerology or the Chinese zodiac), a system many people find meaningful. It reflects that tradition, not evidence about the two of you.
- Research-informed: this quiz is built on a named source (Chapman's love-language framework or named relationship research), and is a self-reflection tool, not a clinical assessment or a diagnosis.
A label is a statement about the method, not about the quality of the page. A Game page is held to the same standard of published formula, tested code and honest copy as a Research-informed page. Labels also decide where money may appear: no Game page carries an affiliate link, and our advertising and affiliate disclosure lists the pages that do.
The reproducibility promise
- Determinism. The same inputs always produce the same output. No tool on this site draws a random number. (Some love testers elsewhere do; we say so when we describe them.)
- Order independence where the method is symmetric. Where a formula treats both people the same way (the name calculator, FLAMES, the friendship calculator, the pair tools), typing the names in the other order changes nothing. Where a method is one-sided by design (the crush calculator), the page says which person is which.
- Published before shipped. A formula is written on this page before the tool that runs it goes live. If the two ever disagree, this page is wrong until we fix it, and the fix is logged on the changelog.
- Checkable by hand. Every Game formula can be done with a pen; the page for each one shows a worked example.
- Client-side. Every calculator runs in your browser. The inputs never leave your device unless you make a share card, and then only the two first names and the score are sent.
- Versioned. Each formula has a version number. A change to a formula bumps the version, updates the page date, and gets a changelog entry that says what changed and why.
How does LoveCalculator.love calculate each result?
LoveCalculator.love calculates each result with a published rule, and every rule below has the same seven-part record: the label, the inputs and the output, the status, the rule in plain words, the pseudocode, the tie and edge rules, and the limits. The status takes one of three values. Fixed means the rule is the published rule of the game or tradition, checked on a stated date against named sources. Proposed means the rule is our own, stated here and open to review. Being verified means the rule is listed in the verification queue further down this page. The current version number of each formula is in the Formula versions table near the end of the page.
- Love Calculator by LoveCalculator.love, Game, Fixed. Section 1
- Love Tester: the Love Test Game, Game, Proposed. Section 2
- FLAMES Calculator, Game, Fixed. Section 3
- Crush Calculator, Game, Proposed. Section 4
- Friendship Calculator, Game, Proposed. Section 5
- Name Compatibility Test, Game, Proposed. Section 6
- Moon Phase Compatibility Calculator, Game, Proposed. Section 7
- Zodiac Compatibility, Tradition, Proposed. Section 8
- Love Calculator by Date of Birth, Tradition, Proposed. Section 9
- Soulmate Calculator by Date of Birth, Tradition, Proposed. Section 10
- Birth Chart Compatibility (Synastry), Tradition, Proposed. Section 11
- Chinese Zodiac Compatibility, Tradition, Proposed. Section 12
- Numerology Compatibility Calculator, Tradition, Being verified. Section 13
- Kundli Matching, Tradition, explainer only with no calculator. Section 14
- Love Language Test, Research-informed, Proposed. Section 15
- Couple Compatibility Quiz (Relationship Compatibility Test), Research-informed, Proposed. Section 16
- Am I in Love? A Quiz, Research-informed, Proposed. Section 17
- Love Style Test, Research-informed, Proposed. Section 18
- MBTI Compatibility, Research-informed, no score. Section 19
One more record sits at the end of the Game group: the compatibility test checker. It has no label, because it routes a visitor to a tool and scores nothing. Status: Proposed. Checker section
How we normalise names (applies to every name-based Game)
Before any letter formula runs, both names go through the same steps, in this order. This is the part most sites leave undocumented and it explains most cross-site differences on the same names.
normalise(name):
s = unicode_normalize(name, "NFKD") # split accented letters into base + mark
s = remove_combining_marks(s) # é becomes e, ñ becomes n, ö becomes o
s = uppercase(s)
s = keep_only(s, A to Z) # drop spaces, hyphens, apostrophes, digits, emoji
return s
Rules the reader should know: accents are folded to their base letter (José and Jose get the same score); letters outside the basic Latin alphabet with no base letter (for example Cyrillic, Devanagari, Chinese characters) are dropped, and if either name becomes empty the tool asks for a name in Latin letters instead of scoring; spaces and punctuation are ignored, so "Mary Ann" and "Maryann" score the same; titles are not removed, so "Mr" adds an M and an R and the page tells you not to type them; full names change the score because they add letters, which is why the page asks whether you want first names or full names. Input length is capped at 60 characters per name.
The Game tools
A Game tool runs a fixed formula on the letters or dates you type. Each record below starts with its label line.
1. Love Calculator by LoveCalculator.love: how does a love calculator work?
Label: Game. Inputs: two names. Output: Love Score, 0 to 99. Status: Fixed: the paper TRUE LOVE game as players describe it, checked 2026-09-21. Counting the letter E under both words, and reducing a total until one digit is left, are our conventions; the sources do not settle them.
In plain words. A love calculator works in three steps: it takes two names, runs a fixed letter formula on them, and returns a number. Ours runs the paper TRUE LOVE rule, which players call "sum and join":
- It takes two names, keeps only their letters, and joins them into one string.
- It counts how often each letter of TRUE appears in the joined letters and adds the four counts into one total, then does the same for LOVE. The letter E sits in both words, so it is counted under each. A total of two or more digits is reduced by adding its digits until one digit is left.
- It sets the TRUE digit and the LOVE digit side by side and reads them as a percentage.
Pseudocode.
love_score(name1, name2):
a = normalise(name1); b = normalise(name2)
if a == "" or b == "": return error("Latin letters needed")
joined = a + b
true_digit = word_digit(joined, "TRUE")
love_digit = word_digit(joined, "LOVE")
return true_digit * 10 + love_digit # 0 to 99
word_digit(joined, word):
total = sum(count(joined, letter) for letter in word) # E is counted under TRUE and again under LOVE
while total > 9:
total = sum(digits_of(total)) # 17 becomes 1 + 7 = 8
return total
Tie and edge rules. (1) The score runs from 0 to 99 and can never be 100, because it is two single digits set side by side. The TRUE digit is the tens digit, so a TRUE digit of 0 gives a score under 10. (2) The rule always finishes: every digit-adding step makes the total smaller, so a total reaches one digit in a few steps at most. (3) The E of TRUE and the E of LOVE are the same letter in your names, and it is counted under each word because each word is summed separately. The published descriptions of the game do not say either way, so this is our stated convention. (4) If neither name has a letter from TRUE or from LOVE, both totals are zero, the score is 0, and the result screen says why. (5) Names are joined before counting, so the order of the names never changes the score. (6) The same name typed twice is scored like any other pair. (7) The score is an integer; there is no rounding.
Worked example. The pair below is fictional. The counts, the totals and the score are printed from the calculator's own code when the site is built, so the example cannot drift from the rule.
Ava and Sam are fictional. Joined and normalised the names are AVASAM. Count each letter of TRUE in those letters and add the counts, do the same for LOVE, and set the two totals side by side.
| T | R | U | E | Total |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| L | O | V | E | Total |
|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 |
TRUE gives 0 and LOVE gives 1, which reads as 1%, band: Beat probability. Formula version 2.0. Two single digits side by side can never read 100, so the highest Love Score is 99.
Limits. The score depends only on letters. It cannot see either person or the relationship. It changes if you use a nickname, a full name, or a different spelling, and the page says so. Short first names hold few of the seven counted letters, so most first-name pairs land under 50, while full names add letters and spread across all five score bands. That is why "Try again with full names" on the result screen is a real suggestion and not a trick.
2. Love Tester
Label: Game. Inputs: two names. Output: a percentage, 0 to 100, and a one-line verdict. Status: Proposed: our own rule, stated here and open to correction by any reader. It differs from the name calculator on purpose, so that the two pages never duplicate each other.
In plain words. The tester takes both normalised names, puts them in alphabetical order so that the order you typed them in does not matter, joins them, and runs a small fixed hash over the letters. The remainder of the hash divided by 101 is your percentage. It looks random and it is not: the same two names always get the same number, and the page says so.
Pseudocode.
love_tester(name1, name2):
a = normalise(name1); b = normalise(name2)
pair = min(a, b) + "|" + max(a, b) # symmetric
h = 2166136261 # FNV-1a 32-bit offset basis
for byte in utf8(pair):
h = (h XOR byte) * 16777619 mod 2^32
return h mod 101 # 0 to 100
Tie and edge rules. Empty name: error, not a score. The animation (needle, sound) is presentation; the number is computed before the animation starts and does not change.
Limits. A hash has no meaning. The page's honest result table says what a band means (nothing) and what it does not mean (anything). This is the "is there a match that always says 100 percent" question: yes, some pairs hash to 100 here, which the name calculator can never return, and no, it does not mean anything.
3. FLAMES Calculator
Label: Game. Inputs: two names. Output: one of six letters: Friends, Lovers, Affectionate, Marriage, Enemies, Siblings. Status: Fixed: the playground rule, with the six letter meanings and the one-for-one cancelling checked 2026-09-21 against published descriptions of the game.
In plain words. Write both names. Cross out the letters they share, one for one (if one name has two Ls and the other has one, one L is crossed out from each). Count the letters left over. Now count that number through the letters F, L, A, M, E, S, going round and round, and cross out the letter you land on. Start counting again from the next letter with the same number, and keep crossing out until one letter is left. That letter is the result.
Pseudocode.
flames(name1, name2):
a = letters(normalise(name1)); b = letters(normalise(name2)) # multisets
common = multiset_intersection(a, b)
n = size(a) + size(b) - 2 * size(common)
if n == 0: return no_result("identical letters")
letters = ["F","L","A","M","E","S"]
start = 0
while length(letters) > 1:
index = (start + n - 1) mod length(letters)
remove letters[index]
start = index mod length(letters) # counting resumes at the next letter
return meaning(letters[0])
Tie and edge rules. (1) If every letter cancels (n = 0), FLAMES has no rule; the tool says "Identical letters. FLAMES has no rule for this; try full names." rather than inventing a result. (2) Letters are cancelled one for one, not all at once, which is the common playground rule and the one that changes results most often between sites. (3) Order of names does not matter. (4) Meanings: F Friends, L Lovers, A Affectionate, M Marriage, E Enemies, S Siblings. The variants some players use (Affection, Attraction or Admirer for A; a percentage version; a three-name version) are described on the page and are not run by the tool.
Limits. A counting game. It has no view of either person.
4. Crush Calculator
Label: Game. Inputs: your name and your crush's name; and, separately, a ten-question self-report quiz. Output: a crush score, 0 to 99; the quiz gives a band. Status: Proposed: the counting rule is the paper TRUE LOVE game of section 1; counting the crush's name twice is our own rule, stated here. The quiz structure (10 questions, self-report) is part of the tool's design.
In plain words, name score. The crush calculator runs the same TRUE LOVE sum and join rule as the name calculator, but it is one-sided by design: the joined letters are your name once and your crush's name twice. The letters of TRUE and of LOVE in the crush's name therefore count double, so the answer is about them from your side, and swapping the names gives a different score. The page says which box is which.
Pseudocode.
crush_score(you, crush):
a = normalise(you); b = normalise(crush)
if a == "" or b == "": return error("Latin letters needed")
joined = a + b + b # you once, the crush twice
true_digit = word_digit(joined, "TRUE") # word_digit as in section 1
love_digit = word_digit(joined, "LOVE")
return true_digit * 10 + love_digit # 0 to 99
Tie and edge rules. The score runs from 0 to 99 and can never be 100, and the rule always finishes, for the reasons given in section 1. The release checks test this tool for the documented asymmetry instead of for symmetry.
Quiz. Ten statements answered Yes, Sometimes or No, scored 2, 1, 0, summed to 0 to 20 and shown as a band. It measures what you noticed and how you answered. It cannot read another person's mind, and the result copy says so in those words.
Limits. Both are games. The page is visited by teenagers; the result copy carries no dating language and never links to the soulmate tool.
5. Friendship Calculator
Label: Game. Inputs: two names. Output: friendship score, 0 to 99. Status: Proposed: the same method as the love calculator, applied to friends. To keep the two tools from returning identical numbers for the same pair, the counting words change, and that choice is our own.
In plain words. The sum and join rule of section 1, run with the words BEST and FRIENDS in place of TRUE and LOVE. The tool counts the letters of BEST in both names joined and adds the four counts, does the same for the seven letters of FRIENDS, reduces each total to one digit, and sets the BEST digit and the FRIENDS digit side by side. The letters E and S sit in both words, so each is counted under both.
Pseudocode.
friendship_score(name1, name2):
a = normalise(name1); b = normalise(name2)
if a == "" or b == "": return error("Latin letters needed")
joined = a + b
best_digit = word_digit(joined, "BEST") # word_digit as in section 1
friends_digit = word_digit(joined, "FRIENDS")
return best_digit * 10 + friends_digit # 0 to 99
Tie and edge rules. As the name calculator: the order of the names changes nothing, the score can never be 100, and the rule always finishes.
Limits. As the name calculator.
6. Name Compatibility Test
Label: Game (letter numerology framed as a game). Inputs: two names. Output: a score 0 to 100 and each name's number. Status: Fixed for the letter table, which is the Pythagorean table numerologists publish. Proposed for the comparison rule, which is our own and waits for a numerologist reviewer.
In plain words. Each letter gets a number from the Pythagorean table (A, J, S = 1; B, K, T = 2; C, L, U = 3; D, M, V = 4; E, N, W = 5; F, O, X = 6; G, P, Y = 7; H, Q, Z = 8; I, R = 9). Add up each name's letters and reduce the total to a single digit by adding its digits (11, 22 and 33 are kept as master numbers and shown as 11/2, 22/4 and 33/6). The two single digits are then looked up on the same 9 by 9 compatibility grid the numerology calculator uses (section 13), and the grid's rating is shown as the score.
name_number(name):
total = sum(letter_value(c) for c in normalise(name))
while total > 9 and total not in {11, 22, 33}:
total = sum(digits_of(total))
return total
name_compatibility(name1, name2):
n1 = reduce_master(name_number(name1)); n2 = reduce_master(name_number(name2))
return grid_score[n1][n2] # symmetric grid, section 13
Limits. This is numerology applied to spelling, run as a game. The page says it is a game because the input is a name and the output is a score about letters; the numerology-by-date tool, which applies the same tradition to birth dates, is labelled Tradition and links here for the letter table.
7. Moon Phase Compatibility
Label: Game (the moon phase overlay trend; adult register). Inputs: two birth dates. Output: an overlay image and a match percentage. Status: Proposed: the overlay follows the trend's own format, and the scoring is our own rule, stated here.
In plain words. The tool works out the phase of the moon on each birth date (from a standard astronomical calculation, not a lookup table), draws the two moons, and lays one over the other. In the trend, a "match" is when the two lit parts together make a full circle. The percentage measures how close to a full circle the overlay is: two phases that are mirror images (first quarter and last quarter, or a waxing crescent and the matching waning gibbous) score 100; two identical crescents score low.
Pseudocode.
phase(date): # fraction of the synodic month, 0 = new moon
days = julian_day(date at 12:00 UTC) - 2451550.1 # reference new moon, 2000-01-06
return frac(days / 29.530588853)
moon_match(d1, d2):
s = frac(phase(d1) + phase(d2)) # 0 when the phases are complementary
d = min(s, 1 - s) # distance from complementary, 0 to 0.5
return round(100 * (1 - 2 * d))
Tie and edge rules. Dates are taken at noon UTC, so the tool does not ask for a birth time or place; the phase can differ by up to about 3 percent of the cycle from the true local value, and the page says the image is approximate. Two full moons score 100 (they overlay to a full circle), which the trend also treats as a match.
Limits. A picture. The moon's phase on your birthday has no bearing on a relationship. The page disambiguates moon phase (this trend) from moon sign (astrology) in one line and never cross-links the two.
Compatibility test checker
Label: none. The checker routes a visitor to a tool; it scores nothing, so it carries no label of its own. Inputs: five answers, each of which names one destination tool. Output: one destination: the name calculator, zodiac compatibility, the birthday calculator, the love language test or the couple compatibility quiz. Status: Proposed: our own routing rule, stated here.
In plain words. The checker on the compatibility test hub asks five questions about what you have to hand and what you want to know. Every answer option points at one of five tools. The tool picked most often is the one the checker sends you to.
Pseudocode.
checker(answers): # exactly five answers, each a destination
priority = [name_calculator, zodiac, birthday, love_language, couple_quiz]
counts = {d: 0 for d in priority}
for a in answers: counts[a] += 1
top = max(counts.values())
leaders = [d for d in priority if counts[d] == top]
return leaders[0], tied = (length(leaders) > 1)
Tie and edge rules. A tie resolves by a fixed priority order, in which the tool that needs least from the visitor comes first. Fewer or more than five answers is an error, not a route. The order, printed from the checker's own code:
Limits. The checker chooses a tool. It says nothing about two people, and its result is a link, not a score.
The Tradition tools
A Tradition tool applies rules that a named system publishes. Our job is to state the rules as the tradition holds them, cite where they come from on the sources page, show the calculation, and say plainly that the tradition is not evidence. A rule marked Being verified is still being checked against the tradition's own references and, once appointed, by its reviewer.
8. Zodiac Compatibility
Label: Tradition: Western astrology. Inputs: two sun signs (or two birth dates, converted to signs). Output: a rating on a five-band scale (the lowest band is not reached by any sun-sign pair under the current points) and a verdict. Status: Proposed: the element, modality and aspect tables are the tradition's own and were checked 2026-09-21; the points and the band table are our own and wait for an astrologer reviewer.
In plain words. Western astrology sorts the twelve signs by element (fire: Aries, Leo, Sagittarius; earth: Taurus, Virgo, Capricorn; air: Gemini, Libra, Aquarius; water: Cancer, Scorpio, Pisces) and by modality (cardinal: Aries, Cancer, Libra, Capricorn; fixed: Taurus, Leo, Scorpio, Aquarius; mutable: Gemini, Virgo, Sagittarius, Pisces). Two signs also sit at a fixed angle on the wheel: the same sign (conjunction, 0 degrees), one sign apart (semisextile, 30), two apart (sextile, 60), three apart (square, 90), four apart (trine, 120), five apart (quincunx, 150) or opposite (opposition, 180). Conjunction, sextile, square, trine and opposition are the five major aspects; the semisextile and the quincunx are minor ones. The tradition reads trines and same-element pairs as easiest, sextiles as friendly, conjunctions as intense and similar, oppositions as magnetic but polarised, squares as friction, and semisextiles and quincunxes as awkward, because neighbouring signs share neither element nor modality. The rating combines these three readings.
Pseudocode.
sign_pair_rating(s1, s2):
distance = min((index(s2) - index(s1)) mod 12, (index(s1) - index(s2)) mod 12) # 0 to 6
aspect_points = {0: 3, 1: 1, 2: 3, 3: 1, 4: 5, 5: 1, 6: 3}[distance] # PROPOSED
element_points = 2 if element(s1) == element(s2) else (1 if compatible_elements(s1, s2) else 0)
# compatible: fire with air, earth with water (PROPOSED, the common convention)
modality_points = 1 if modality(s1) != modality(s2) else 0 # same modality reads as a power struggle
total = aspect_points + element_points + modality_points # 0 to 8
return band(total) # 7 to 8 "strong match", 5 to 6 "good match", 3 to 4 "mixed", 2 "takes adjustment", 0 to 1 "challenging"
Tie and edge rules. Sun sign from a date uses fixed date ranges (Aries 21 March to 19 April, and so on); the true boundary shifts by up to a day depending on the year and the birth time, so people born on a boundary day are told so and offered both signs. The pair page's canonical order (Aries then Cancer) is only a URL convention; the rating is symmetric.
Limits. A sun sign is one placement out of many that astrologers read; the synastry tool reads more. And the whole system is a tradition: there is no evidence that birth dates predict how two people get on.
9. Love Calculator by Date of Birth
Label: Tradition: Western astrology plus Pythagorean numerology (hybrid). Inputs: two birth dates. Output: a combined rating with both components shown and linked to their pair pages. Status: Proposed: blending the sun-sign match and the life-path match into one score is the tool's design, and the half and half weighting is our own.
birthday_compatibility(d1, d2):
z = sign_pair_rating(sign(d1), sign(d2)) # 0 to 8, section 8
n = grid_score[life_path(d1)][life_path(d2)] # 0 to 100, section 13
combined = round(0.5 * (z / 8 * 100) + 0.5 * n)
return combined, z, n
Limits. Two traditions averaged. Both components are shown so nobody mistakes the blend for a third method. No birth time is asked for and the page never uses the soulmate framing (that tool is separate and adult-framed).
10. Soulmate Calculator by Date of Birth
Label: Tradition, soulmate framing (18 plus). Inputs: two birth dates, or one date in the one-date mode. Output: a soulmate verdict (three bands), never a prediction. Status: Proposed: the inputs and the method table are the tool's design, and the three verdicts are our own reading of the two traditions.
In plain words. The two-date mode runs the birthday compatibility calculation above and maps the combined score to three verdicts the tradition uses for soulmate talk: "the tradition calls this a soulmate pairing" (trine or same-element sign pair and a same-group life path), "the tradition calls this a growth pairing" (a square or opposition sign pair, or life paths in different groups), and "the tradition reads this as a slow build" (everything else). The one-date mode lists which signs and life paths the tradition pairs with yours, as a table, with no name attached.
Limits. This page is adult-framed and two clicks from any game page by design. It uses no prediction language, no "meant to be", and no remedy. The long-form Tradition disclaimer sits under the result.
11. Birth Chart Compatibility, or Synastry
Label: Tradition: Western astrology (synastry). Inputs: two birth dates, with optional times and places. Output: an aspect list, a placement table and a score. Status: Proposed: the placements weighted for love (the Sun, Moon, Venus, Mars and the ascendant) and the aspects read follow the tradition in outline; the orbs, the weights and the scaling are our own, wait for an astrologer reviewer, and are listed in the verification queue.
In plain words. The tool calculates where the Sun, Moon, Mercury, Venus, Mars, Jupiter and Saturn were for each birth, and the ascendant when a birth time and place are given. It then measures the angles between one person's placements and the other's and keeps the ones that fall within a tolerance (the orb) of the five classic aspects. Each kept aspect gets a weight: the pairs the tradition reads most strongly for love (Sun to Moon, Venus to Mars, Moon to Moon, Venus to Venus, Sun to Venus) weigh most; Saturn contacts are counted as stabilising rather than warm; squares and oppositions between the personal planets count as friction. The score is the weighted balance, scaled to 0 to 100.
Pseudocode.
synastry(chart1, chart2):
aspects = []
for p in planets(chart1):
for q in planets(chart2):
angle = separation(longitude(p), longitude(q)) # 0 to 180
for (name, exact, orb) in [("conjunction",0,8),("opposition",180,8),("trine",120,6),("square",90,6),("sextile",60,4)]:
if abs(angle - exact) <= orb_for(p, q, orb): # Sun and Moon get +2 degrees
aspects.append((p, q, name, abs(angle - exact)))
score = 0; max_possible = 0
for (p, q, name, exactness) in aspects:
w = pair_weight(p, q) # e.g. Sun-Moon 5, Venus-Mars 5, Moon-Moon 4, Venus-Venus 4, Sun-Venus 3, others 1, Saturn contacts 2
sign = +1 if name in {"conjunction","trine","sextile"} else (-1 if p or q is a personal planet else 0)
tightness = 1 - exactness / orb
score += sign * w * tightness; max_possible += w
return round(50 + 50 * score / max_possible), aspects
No-birth-time mode. Without a time, the Moon's position is uncertain by up to about 13 degrees and the ascendant and houses cannot be computed, so the tool takes noon, drops the ascendant and house overlays, widens the Moon's orb, and says in the result which readings it left out. It never guesses a rising sign.
Positions. Planetary longitudes come from astronomy-engine 2.1.19 (MIT licence), run in your browser. Positions are checked against a public reference chart calculator for a fixed set of test births (release check 4, below).
Limits. This is the tradition's method, described faithfully. The weights are conventions astrologers argue about, which is why a reviewer is being sought. There is no evidence that any of it predicts how two people get on.
12. Chinese Zodiac Compatibility
Label: Tradition: Chinese zodiac. Inputs: two animals, or two birth years. Output: a verdict. Status: Fixed for the three lists below (the four trines, the six harmonies and the six clashes), checked 2026-09-21. Proposed for the verdict ladder that ranks them, which is our own.
In plain words. The twelve animals sit in four trines of three (Rat, Dragon, Monkey; Ox, Snake, Rooster; Tiger, Horse, Dog; Rabbit, Goat, Pig), which the tradition reads as the easiest matches. Six harmony pairs, often called secret friends, are read as good: Rat and Ox; Tiger and Pig; Rabbit and Dog; Dragon and Rooster; Snake and Monkey; Horse and Goat. Six clash pairs are read as difficult: Rat and Horse; Ox and Goat; Tiger and Monkey; Rabbit and Rooster; Dragon and Dog; Snake and Pig. Each clash pair sits opposite on the twelve-year cycle, six years apart. The verdict is the highest of those readings that applies, and "neutral" otherwise.
Tie and edge rules. The year-to-animal lookup uses the lunar new year date, not 1 January, so a January or early February birth is told its animal may be the previous year's and offered both.
Limits. Tradition. The Chinese and Western systems are never blended; each hub carries one disambiguation line to the other.
13. Numerology Compatibility
Label: Tradition: Pythagorean numerology. Inputs: two birth dates, or two life-path numbers. Output: a score from the 9 by 9 grid and both numbers. Status: Being verified: the three-group reading exists and is contested; the grid values are Proposed and wait for a numerologist reviewer. The reduction itself (month, day and year, with 11, 22 and 33 kept) is the method numerologists publish.
In plain words. Reduce the month, the day and the year of a birth date each to a single digit by adding their digits, except that 11, 22 and 33 are kept as they are at this stage. Add the three results and reduce again the same way. The final number is the life path: 1 to 9, or a master number 11, 22 or 33. One popular way to read life path pairs sorts the nine numbers into three groups, 1-5-7, 2-4-8 and 3-6-9, and treats numbers in the same group as natural matches. Not every numerologist uses it: numerology.com, for example, lists matches number by number and rates 3 with 6 as a difficult pair. Our grid uses the three-group reading and says so. The pair 4 with 8 is read both ways: numerologist.com cautions that two Saturn-ruled numbers can make a relationship heavy, while numerology.com rates 4 with 8 as a strong pair. Master numbers are matched through their reduced digit (11 as 2, 22 as 4, 33 as 6) and shown as 11/2 and so on.
Pseudocode.
reduce(n):
while n > 9 and n not in {11, 22, 33}:
n = sum(digits_of(n))
return n
life_path(date):
total = reduce(date.month) + reduce(date.day) + reduce(date.year)
return reduce(total)
grid_score[a][b]: # a, b in 1 to 9 after reduce_master; symmetric; values PROPOSED
same group (1-5-7, 2-4-8, 3-6-9): 80 to 95 depending on the pair; the same number scores 85
adjacent groups as this reading has them: 55 to 75
the pairs this reading has as difficult: 35 to 50
The 9 by 9 grid. Status: Proposed, pending a numerologist reviewer. The table is printed from the same data file the calculator uses.
These values are our own proposed table and have not yet been checked by a numerologist. This table is loaded from the same data file the name compatibility test and the birthday calculator use. Master numbers are matched through their reduced digit and shown as 11/2, 22/4 and 33/6.
| Number | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 85 | 45 | 62 | 74 | 91 | 75 | 92 | 62 | 45 |
| 2 | 45 | 85 | 45 | 93 | 74 | 75 | 75 | 92 | 62 |
| 3 | 62 | 45 | 85 | 45 | 62 | 92 | 75 | 75 | 92 |
| 4 | 74 | 93 | 45 | 85 | 45 | 62 | 74 | 91 | 75 |
| 5 | 91 | 74 | 62 | 45 | 85 | 45 | 93 | 74 | 75 |
| 6 | 75 | 75 | 92 | 62 | 45 | 85 | 45 | 62 | 92 |
| 7 | 92 | 75 | 75 | 74 | 93 | 45 | 85 | 45 | 62 |
| 8 | 62 | 92 | 75 | 91 | 74 | 62 | 45 | 85 | 45 |
| 9 | 45 | 62 | 92 | 75 | 75 | 92 | 62 | 45 | 85 |
Tie and edge rules. There are two reduction conventions in use (reduce each component first, as above, or add all digits of the whole date); they differ for some dates. This site uses the component method, states it, and shows the working so you can see which you got. A date that produces a master number keeps it visible.
Limits. Tradition. Life-path meanings for a single person are not on this site; only pairs are.
14. Kundli Matching
Label: Tradition: Vedic astrology. Status: explainer only, with no calculator in this phase. The eight kootas, their point weights summing to 36, and the 18-point threshold were verified on 2026-09-21 against the tradition's own publishers. By our policy a Vedic astrologer still reviews the page before it states them as the tradition's rule.
The Research-informed quizzes
A Research-informed quiz counts your answers against a framework from a named source. The scoring is a count, not a model; the page states how strong the evidence for the framework is; the result is a self-reflection tool.
15. Love Language Test
Label: Research-informed: love languages (Chapman, 1992). Inputs: your answers to a set of forced-choice pairs. Output: your five language scores, ranked; primary and secondary. Status: Proposed: the framework is Gary Chapman's and the naming is descriptive; the item set is our own. The evidence note below cites a 2024 review whose citation was verified on 2026-09-21.
In plain words. Each question shows two statements, each of which expresses one of the five languages (words of affirmation, quality time, receiving gifts, acts of service, physical touch). You pick the one that feels more like you. The test counts how often you picked each language. The highest count is your primary language, the second highest your secondary. Our proposed item set pairs every language with every other language three times, which is 30 questions and a maximum score of 12 per language, so no language can win by appearing more often.
Pseudocode.
love_language(answers): # answers: list of chosen language codes, one per question
counts = {W: 0, Q: 0, G: 0, A: 0, P: 0}
for code in answers: counts[code] += 1
ranked = sort(counts, descending)
primary = ranked[0]; secondary = ranked[1]
if counts[ranked[0]] == counts[ranked[1]]: mark_tie(primary, secondary)
return counts, primary, secondary
Tie and edge rules. A tie for first is reported as a tie, not broken silently. The DUO mode runs the same count for each partner and shows the two rankings side by side; it computes no "compatibility percentage", because the framework does not support one and the evidence note says why.
What the page says about the evidence. Chapman's framework is a popular vocabulary. A peer-reviewed review tested the three central assumptions of his book: that each person has a preferred love language, that there are five, and that couples are more satisfied when partners speak one another's preferred language. It found no strong support for any of the three. The review is Impett, E. A., Park, H. G., and Muise, A. (2024), Current Directions in Psychological Science, 33(2), 87 to 92, https://doi.org/10.1177/09637214231217663. The test is therefore a way to talk about preferences, not a measurement of a relationship.
Trademark. The test is called the "love language test", descriptively. It credits Gary Chapman's 1992 book. It never says "official", never uses "The 5 Love Languages" as a brand name, and uses its own questions.
16. Couple Compatibility Quiz
Label: Research-informed: named relationship research (Gottman, similarity research). Inputs: answers on nine dimensions (communication, values, life goals, intimacy, conflict style, humour, finances, trust, emotion) in SOLO mode; both partners' answers in DUO mode. Output: a score per dimension and a lowest-dimension note. Status: Proposed: the nine dimensions are the quiz's design; the item count and the scaling are our own and open to review by a couples therapist or relationship researcher.
Pseudocode.
couple_quiz_solo(answers): # 4 items per dimension, each 1 to 5
for dim in dimensions:
score[dim] = round((mean(answers[dim]) - 1) / 4 * 100)
overall = round(mean(score.values()))
lowest = argmin(score)
return score, overall, lowest
couple_quiz_duo(answers_a, answers_b):
for dim in dimensions:
agreement[dim] = round(100 - mean(abs(answers_a[dim][i] - answers_b[dim][i]) for i) / 4 * 100)
overall = round(mean(agreement.values()))
return agreement, overall, argmin(agreement)
What the result says. SOLO scores describe how you rated your relationship on each dimension. DUO scores describe how closely the two of you answered the same questions. In DUO mode the first partner's answers travel inside the link, in the part after the # sign, which a browser never sends to a server; the comparison is worked out on the second partner's device and nothing is stored. Neither is a verdict, and a low score is described as "you two answered differently on a lot of questions; here is what each section was asking", never as a problem to be sold a fix for. No counselling link appears on a result.
17. Am I in Love? Quiz
Label: Research-informed (self-reflection quiz). Inputs: 12 questions about attention, comfort, future thinking and jealousy. Output: the higher of three subscales: infatuation, attachment or love. Status: Proposed scoring, our own. Four items per subscale, each 1 to 5; the highest mean wins; a tie is reported as a tie. The page says in its first paragraph that the quiz cannot read the other person.
18. Love Style Test
Label: Research-informed (love styles framework, evidence status stated). Inputs: a short quiz. Output: your highest-scoring style among the seven love styles framework credited on the page (Truity). Status: Proposed scoring, our own, with the same count-and-rank method as the love language test. The page states the framework's evidence status and distinguishes a love style (how you show love) from a love language (how you prefer to receive it).
19. MBTI Compatibility
Label: Research-informed (personality framework, not research-validated for matching). The selector shows the pairing the framework's popular charts give for two types and the reasoning by cognitive functions. It runs no score, because the page's first paragraph states that no research validates the framework for matching couples, and a score would contradict it.
Why do love calculator results differ between sites?
Love calculator results differ between sites because every site runs a different formula, and almost none of them say which. The common ones:
| Method | What it does | Symmetric? | Who uses it |
|---|---|---|---|
| The paper TRUE LOVE game | Counts the letters of TRUE and of LOVE, adds each word's counts and sets the two totals side by side | Yes | A playground game; this site's name calculator |
| The paper LOVES game | Counts L, O, V, E and S, then keeps adding neighbouring digits until two are left | Yes | A playground game studied in a 2016 mathematics paper, which shows the adding does not always finish |
| Letter-value sums | Maps letters to 1 to 9 and compares the sums | Yes | Name numerology tools; this site's name compatibility test |
| String hashing | Hashes the two names and takes the remainder | Only if the code sorts the names first | Many apps; often not symmetric, which is why swapping names changes the score. This site's Love Tester sorts the names first, so it is symmetric |
| Random draw | Picks a number | No (and not repeatable) | Many "love tester" games; some say so, most do not |
| Fixed lookup | A stored score for famous pairs, a formula for the rest | Varies | Novelty sites |
None of these can measure a relationship. A fixed formula is real in the sense that you can check it, and a random draw is fake only when the site hides it; neither is accurate about a couple. The honest difference between them is whether the site tells you which one it runs. This site does, above. Whether any of them can be right about a couple is a different question; we take it up under are love calculators accurate.
Are the results random or a fixed formula?
Fixed. The same two names, dates or answers always give the same result here, because every tool runs a published formula and none draws a random number.
No tool on this site uses a random number, a timer or the date to compute a result. The Love Tester's needle animation and the FLAMES elimination animation are presentation over a result that was computed first. Some other sites' love testers do draw random numbers and say so ("results are random"); that is honest, and it is also why you get a different number every time there. Ours gives the same number every time, which is honest in a different way: it means you can check it.
What does the disclaimer for each label say?
Each label has one short disclaimer, printed here by reference from the same protected strings the tools use. On a quiz page, the Research-informed line names the quiz's own source where this list says "a named source".
- Game
- Game: this score comes from a fixed formula on the letters or answers you enter. It is for fun and cannot tell you anything about a real relationship.
- Tradition
- Tradition: this result follows a named tradition, such as Western astrology or Pythagorean numerology, a system many people find meaningful. It reflects that tradition, not evidence about the two of you.
- Research-informed
- Research-informed: this quiz is built on a named source, such as a published framework or named relationship research, and is a self-reflection tool, not a clinical assessment or a diagnosis.
Each appears on the result screen of its tool, and its long form appears once per page in the "How we calculate it" box.
Which facts on the site are still being verified?
Eight of the nine facts in the queue were checked on 2026-09-21, and one, the synastry orbs and weights, is not yet checked. Two of the checked facts still wait for a reviewer. The queue lists each fact, where it is used, its source, the date it was checked and its status.
| Fact | Where it is used | Source | Checked on | Status | Reviewer |
|---|---|---|---|---|---|
| The paper TRUE LOVE rule | Name calculator, crush calculator, paper-method page | Two independent published descriptions of the game (Her Campus, 2025; Answers.com); Johnston (2016), arXiv:1602.03556, for the separate LOVES game | 2026-09-21 | Verified: the documented rule is sum and join, and the calculator runs it. Counting E under both words is our stated convention | Editor |
| FLAMES letter meanings and one-for-one cancelling | FLAMES calculator, how-to-play page | Wikipedia, "Flames (game)"; GeeksforGeeks, "Program to implement FLAMES game" | 2026-09-21 | Verified | Editor |
| Numerology compatible groups 1-5-7, 2-4-8, 3-6-9 | Numerology calculator, 45 pair pages, birthday calculator | Joy of Numerology (the three concords); numerology.com, which does not use them | 2026-09-21 | Checked: the grouping exists and is contested; reviewer still required | Numerologist (to be appointed) |
| Chinese zodiac trines, six harmonies, clashes | Chinese zodiac hub, animal and pair pages | yourchineseastrology.com; Wikipedia, "Chinese zodiac" | 2026-09-21 | Verified | Editor, then reviewer |
| Kundli eight-koota weights summing to 36, the 18-point threshold | Kundli explainer | AstroSage; Vedic Rishi | 2026-09-21 | Verified; Vedic reviewer still required by policy | Vedic astrologer (to be appointed) |
| Synastry aspect orbs and love weights | Synastry calculator, synastry explainer | Our own Proposed values | Not yet checked | Being verified | Astrologer (to be appointed) |
| Impett, Park and Muise review of the love-language evidence | Love language test, love languages explainer, About page | Crossref record for DOI 10.1177/09637214231217663: 2024, Current Directions in Psychological Science, 33(2), 87 to 92 | 2026-09-21 | Verified | Editor |
| Gottman's "69 percent of conflicts are perpetual" figure | Relationship compatibility explainer | The Gottman Institute's research summary; cited as "Gottman reports", a clinical observation from one laboratory | 2026-09-21 | Verified | Editor |
| Sun-sign date ranges and the cusp rule | Zodiac calculator, birthday calculator | Wikipedia, "Zodiac"; astrology.com sign table | 2026-09-21 | Verified | Editor |
The test protocol: eight checks on every release
A verified rule still has to be run correctly, which is what the release checks test. Every tool passes these eight checks before a release, and the results table below is regenerated at build. A failed check blocks the release; a check we cannot run (for example a browser we do not have access to) is marked "not run", not "passed".
| # | Check | What we do | Pass condition |
|---|---|---|---|
| 1 | Determinism | Run every tool 1,000 times on a fixed set of 200 input pairs, on the same device | Identical outputs on every run; the per-tool hash of all outputs matches the published hash for the formula version |
| 2 | Order symmetry | Run every symmetric tool on each test pair in both orders | Identical outputs; the crush calculator, which is one-sided by design, is checked for the documented asymmetry instead |
| 3 | Unicode and spelling | Accented, hyphenated, apostrophed, multi-word, all-caps, lower-case and non-Latin versions of each test name | Accented and case variants match their plain form; non-Latin names produce the stated error, never a score; no exception is thrown |
| 4 | Edge cases and reference values | Empty names, one-letter names, 60-character names, identical names, names with none of the phrase letters, boundary birth dates (cusp days, 29 February, lunar new year eve), master-number dates; for synastry, a fixed set of 20 test births compared with a public reference chart calculator | Every edge case produces the documented result or error; synastry longitudes within 1 degree of the reference for the Sun, Mercury, Venus, Mars, Jupiter and Saturn and within 2 degrees for the Moon at noon |
| 5 | Cross-browser and device | The full test set on the browser and OS matrix (below) | Identical outputs across the matrix; the share button and the result screen render; no layout shift over 0.05 |
| 6 | Offline | Load a tool page, disconnect the network, run the test set | Every calculator computes and renders with no network; only the share card (which needs the server) reports that it is unavailable |
| 7 | Share-card fidelity | Generate the share card and certificate for 50 results | The names, score and label on the card match the result screen exactly; first names only appear; the label word is present; the image is 1080 by 1920 and 1200 by 630 |
| 8 | Accessibility | Automated checks (axe) plus a manual keyboard and screen-reader pass on each tool | No critical or serious automated findings; every tool is operable by keyboard alone; the result is announced to a screen reader; contrast at least 4.5 to 1; the Love Tester's sound can be turned off |
Browser and OS matrix. The matrix has two parts. The harness rows run on every release in a headless test runner: Chromium, Firefox and WebKit on macOS, plus Chromium emulating a Pixel 7 and WebKit emulating an iPhone 14, and the same pages with JavaScript switched off. The device rows, which need a real phone or a browser we do not run in the harness, are the latest two versions of Safari on iOS and Chrome on Android, Samsung Internet, and Edge on Windows 11; a device row nobody ran on that release says "not run". The matrix, the run date and the result per cell are published in the table below, and a cell we could not run says "not run".
Statistical reporting. For check 1 we publish the number of runs, the number of inputs, and the output hash. For check 4 we publish the maximum and mean position error against the reference, per body. For check 5 we publish the pass or fail per cell. We do not publish a single "accuracy percentage", because it would mean nothing.
Release test results
The table shows the current release, and a check that has not been run says "not run". The changelog keeps the record of earlier releases: previous releases are listed with every change, dated.
Release 0.1.0, run 2026-09-22.
| Check | Name | Result |
|---|---|---|
| 1 | Determinism | passed: every formula's output over its fixed input set matched the published golden-file hash (13 golden files, 897 unit tests). The protocol's 1,000-run repetition is not automated: the fixed set runs once per release and is hashed |
| 2 | Order symmetry | passed: identical outputs in both orders for every symmetric tool, the sign rating over all 144 ordered pairs, the Chinese verdict over all 144, the numerology grid over all 81 cells; the crush calculator checked for its documented asymmetry |
| 3 | Unicode and spelling | passed: accented, hyphenated, apostrophed, multi-word and case variants match their plain form; non-Latin names produce the stated error and never a score |
| 4 | Edge cases and reference values | partly run: every documented edge case passed (empty, one-letter and 60-character names, identical names, no phrase letters, cusp days, 29 February, Lunar New Year eve, master-number dates). Synastry positions agreed with JPL Horizons to 0.003 degrees on 4 reference births; the protocol asks for 20 |
| 5 | Cross-browser and device | harness rows passed, device rows not run: 155 end-to-end checks passed on Chromium, Firefox and WebKit on macOS, on Chromium as a Pixel 7 and WebKit as an iPhone 14, and with JavaScript off. No real phone, Edge on Windows or Samsung Internet was run |
| 6 | Offline | passed: the name calculator, Love Tester, crush calculator and FLAMES computed and rendered with the network disconnected; the other tools are not yet in the offline set |
| 7 | Share-card fidelity | not run: the card renderer is not built |
| 8 | Accessibility | automated and keyboard parts passed; screen-reader pass by a person not run: axe-core 4.13 found no WCAG 2.0 A and AA, 2.1 A and AA or 2.2 AA violation on any of the 70 pages, contrast included; keyboard-only operation passed on all 8 Wave 1 tools in Chromium and Firefox (the birthday tool's date fields are not typed the same way in WebKit and are recorded for the other two engines); every result is announced through a live region and every field has a label. A run with a screen reader by a person has not been done. The Love Tester has no sound or motion yet, so that item is not applicable |
Performance targets we hold ourselves to
Published so that the "fast, static, client-side" claim on the About page is checkable: time to first byte under 100 milliseconds at the edge cache, largest contentful paint under 1.5 seconds on a mid-range phone, interaction delay under 150 milliseconds, layout shift under 0.05, and zero JavaScript required to read any text, table or label on any page. The field numbers will be published on this page once the site has enough traffic to measure, and reviewed at each quarterly sweep.
Formula versions
Each formula carries a version number, and this table is printed from the same registry the calculators read, so a version here is always the version that ran your result. A change to a formula raises its number and gets a changelog entry.
| Tool | Label | Version | Status |
|---|---|---|---|
| Love Calculator (names) | Game | 2.0 | Checked against published descriptions of the method |
| Love Tester | Game | 1.0 | Our own rule, stated on this page and open to review |
| FLAMES Calculator | Game | 1.0 | Checked against published descriptions of the method |
| Crush Calculator | Game | 2.0 | Our own rule, stated on this page and open to review |
| Friendship Calculator | Game | 2.0 | Our own rule, stated on this page and open to review |
| Name Compatibility Test | Game | 1.0 | Our own rule, stated on this page and open to review |
| Zodiac Compatibility | Tradition | 1.1 | Our own rule, stated on this page and open to review |
| Love Calculator by Date of Birth | Tradition | 1.0 | Our own rule, stated on this page and open to review |
| moon | Game | 2.0 | Our own rule, stated on this page and open to review |
| soulmate | Tradition | 1.0 | Our own rule, stated on this page and open to review |
| chinese | Tradition | 1.0 | Our own rule, stated on this page and open to review |
| synastry | Tradition | 1.0 | Our own rule, stated on this page and open to review |
| Numerology Compatibility | Tradition | 1.0 | Being checked; see the verification list on this page |
| Love Language Test | Research-informed | 1.0 | Our own rule, stated on this page and open to review |
| Couple Compatibility Quiz | Research-informed | 1.0 | Our own rule, stated on this page and open to review |
| Compatibility test checker | Research-informed | 1.0 | Our own rule, stated on this page and open to review |
Corrections to this page
If a formula on a tool does not match this page, or a rule here is wrong, that is a correction: info@lovecalculator.love, fixed within 72 hours or explained, logged on the changelog. Suraj Giri, who writes the formulas, answers that mailbox. The editorial policy says how.
Sources
- Johnston, Iain G. (2016). Endless love: On the termination of a playground number game. arXiv:1602.03556: the LOVES game and why the adding does not always finish
- University of Birmingham (2016). Calculating endless love
- Impett, Park and Muise (2024). Current Directions in Psychological Science, 33(2), 87 to 92