Ionic strength calculator
Sum up how charged a solution is: 0.1 mol/L of sodium chloride, entered as its two ions with charges +1 and −1, gives an ionic strength of 0.1 mol/L, and you see what each ion adds. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
Ionic strength is the single number electrochemists and solution chemists use to summarize how strongly charged a mixture is. The classical definition is one-half the sum over all free ions of each molar concentration times the square of its charge number. That quantity, written I equals one-half sum c sub i z sub i squared, appears in Debye–Hückel activity coefficients, in effective rate constants for ionic reactions, and in every lab notebook that records a supporting electrolyte. This calculator takes two parallel lists: molar concentrations in moles per liter and integer or numeric charge numbers for each species. It returns the ionic strength in moles per liter, the unhalved sum, and a per-ion breakdown so you can see which salt dominates. Negative concentrations are rejected as non-physical rather than silently flipped.
How ionic strength is defined and why z squared matters
Start from a clear aqueous electrolyte that fully dissociates into free ions you can list by formula and charge. For each ion species i write down its analytical molar concentration c sub i in moles per liter and its charge number z sub i, for example plus one for sodium, minus one for chloride, plus two for calcium, and minus two for sulfate. The contribution of that species to ionic strength is c sub i times z sub i squared.
Squaring the charge means a divalent ion at the same molarity weighs four times as heavily as a monovalent ion: a 0.1 molar calcium ion contributes 0.4 to the sum while a 0.1 molar sodium ion contributes only 0.1. After you accumulate every species that is present as a free ion, multiply the total sum by one half. That half-factor is conventional so that a simple 1:1 salt such as sodium chloride at concentration C yields I equals C, which is the textbook result students memorize.
Neutral molecules, undissociated weak acids that have not ionized, and solvent water itself do not enter the sum; only free charged species count. Entries must be finite; NaN and Infinity are rejected. Parallel arrays must have the same length.
Any concentration that is negative fails early with invalid input because molar concentration cannot be negative in a physical solution.
What you send and what you get back
Send two required fields. The field charges is a matching non-empty array of finite numbers for the charge of each species in the same order. Both arrays must have the same length, at least one ion and at most one hundred ions.
Zero concentration and zero charge are allowed; they simply contribute nothing. Classic textbook checks include 0.1 molar NaCl treated as 0.1 of Na plus and 0.1 of Cl minus, which yields I equals 0.1, and 0.1 molar CaCl2 treated as 0.1 of Ca two-plus plus 0.2 of Cl minus, which yields I equals 0.3.
Where ionic strength calculators show up in real work
Analytical chemistry labs record ionic strength whenever they prepare buffer and supporting-electrolyte media for potentiometry, voltammetry, or conductivity work, because activity coefficients and junction potentials depend on I more than on the nominal salt name. Biochemistry and protein purification protocols often specify a target ionic strength rather than a single salt concentration so that salt gradients and dialysis steps stay comparable across chloride, sulfate, and phosphate systems.
Environmental water chemists convert multi-ion major cation and anion lists from hardness and salinity assays into I before estimating activity coefficients for speciation models. Secondary-school and college physical chemistry courses assign Debye–Hückel drills that first demand a correct I from a written salt recipe, then a log gamma from that I; a single trusted oracle that returns both the total and the per-ion contributions speeds grading and demo setup.
If you later need only molarity from mass percent, activity coefficients from Debye–Hückel, freezing-point depression, or pH of a weak acid, treat those as separate search intents and landings rather than overloading this ionic strength calculator page.
What you can do with it
Homework and exam answer keys
Generate I and per-ion c·z² contributions from textbook salt recipes so teachers and auto-graders share one ionic-strength ground truth.
Buffer and supporting electrolyte prep
Compute I for multi-ion buffers and supporting salts before running Debye–Hückel or extended activity models in the lab notebook.
Environmental multi-ion water samples
Turn major cation and anion molarities from water assays into a single ionic strength for speciation and conductivity context.
FAQ
What happens if a concentration is negative?
Molar concentration cannot be negative; the calculator rejects non-physical values rather than inventing a result.
How do I enter a salt like CaCl2?
List every free ion after dissociation. For 0.1 M CaCl2 send concentrations [0.1, 0.2] and charges [2, -1] (or [2, -1, -1] with two chloride entries of 0.1 each).
Do neutral molecules count?
No. Only free charged species enter the sum. Undissociated weak acids, solvent water, and neutral solutes should be omitted from the arrays.
What does it cost?
The browser tool is free and runs locally.
Why does a doubly charged ion count four times as much?
Because each ion's concentration is multiplied by the square of its charge. At the same 0.1 mol/L, a calcium ion adds 0.4 to the sum while a sodium ion adds only 0.1.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/chem/ionic-strength \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"concentrations":[0.1,0.1],"charges":[1,-1]}'const res = await fetch("https://api.kit.forhosting.com/chem/ionic-strength", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"concentrations": [
0.1,
0.1
],
"charges": [
1,
-1
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/chem/ionic-strength",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"concentrations": [
0.1,
0.1
],
"charges": [
1,
-1
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/chem/ionic-strength", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"concentrations":[0.1,0.1],"charges":[1,-1]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"concentrations":[0.1,0.1],"charges":[1,-1]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/chem/ionic-strength", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"concentrations": [
0.1,
0.1
],
"charges": [
1,
-1
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "chem.ionic_strength",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
How ionic strength is defined and why z squared matters
The algorithm here is deterministic floating-point arithmetic with no random seeds, no wall-clock timestamps, and no network calls, so identical concentration and charge lists always produce identical JSON.
What you send and what you get back
The field concentrations is a non-empty array of finite numbers, or a JSON string of that array, giving each ion molarity in moles per liter. Missing fields, non-numeric strings, NaN, Infinity, empty arrays, length mismatches, and any negative concentration fail with invalid_input and are not charged. On success the response echoes the cleaned concentrations and charges, an ions array of objects each with index, concentration, charge, z_squared, and contribution equal to c times z squared, the numeric ionic_strength I, the unhalved sum_c_z2, a units map, and the method and formula strings documenting the half-sum definition. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where ionic strength calculators show up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Technical questions
What is ionic strength?
Ionic strength I is one-half the sum over free ions of each molar concentration times the square of its charge: I = ½ Σ c_i z_i², reported here in mol/L.