Super Six, Bloemfontein: New Zealand 253-4 (47.2 overs) beat Zimbabwe 252-7 (50 overs) by six wickets
Nathan Astle stroked a heroic unbeaten century as New Zealand denied a spirited Zimbabwe side to keep their semi-final hopes alive.
Astle scored 102 in 122 balls, guiding the Black caps home in the 48th over after he and Chris Cairns had put on 121 runs for the fourth wicket.
The pair came together with New Zealand precariously placed on 97 for three, turning a delicately poised match in New Zealand's favour.
The four points they earned from this win lifts them above Sri Lanka into fourth place on the Super Six table.
Astle's 13th one-day century was a beautifully measured knock, but Zimbabwe were left to rue the slack fielding that twice let Cairns off the hook at vital stages of the run-chase.
They were also left to lament the rotten luck that denied them the services of spinner Brian Murphy, who injured his calf while practising in-between innings.
The loss rendered Zimbabwe bereft of bowling depth as Astle orchestrated a victory push timed to perfection.
Astle's match-winning deeds compensated for a disappointing effort in the field from New Zealand that saw the tournament co-hosts reach 252 for seven after floundering at 106 for six at one stage.
Tatenda Taibu's 53, his maiden one-day half-century, got Zimbabwe's innings back on track before skipper Heath Streak and Sean Ervine bludgeoned 62 runs off the last three overs.
Streak, who finished unbeaten on 72 off 84 balls, was awesome at the death, taking 23 runs off one Chris Harris over and 26 off the last over of the innings from Andre Adams.
A 54-run stand for the second wicket between Andy Flower and Craig Wishart negated the early loss of Dion Ebrahim for a duck.
But when Wishart was removed by Cairns, a mini-collapse ensured that witnessed Grant Flower and Guy Whittall also fall in the space of six runs.
It got worse for Zimbabwe as two mindless run-outs claimed two of their lethal weapons.
Andy Flower, who had moved serenely to 37, chanced Astle's arm at mid-off and fell to a superb direct hit.
Cairns took two wickets and hit a fifty in a return to form
Big-hitting Andy Blignaut followed after 'keeper Brendan McCullum capitalised on confusion between the wickets and effected the dismissal at the non-striker's end.
Just 24 runs were scored in the next 10 overs as Taibu and Streak slipped into damage control.
But their rearguard action settled Zimbabwe nerves and laid the platform for Streak's late-innings salvo.
They carried the momentum into New Zealand's innings, removing Craig McMillan for eight to draw first blood in the Kiwis' run-chase.
Skipper Stephen Fleming played well to reach 46, but he was trapped leg before by Andy Blignaut and New Zealand were three down when Scott Styris holed out in the deep.
An upset win loomed large for Zimbabwe, but they had no answer to Astle's thoughtful strokeplay.
Cairns was dropped by sub fielder Doug Marillier in the 33rd over before surviving a run-out chance soon after.
The all-rounder was eventually bowled for 54 but with Astle at the crease victory was always in sight, and he punched the air in delight when he reached triple figures with a boundary.
The Black caps face Australia on Tuesday in Port Elizabeth, while Zimbabwe are faced with the prospect of winning their two remaining games to stay alive.
DD Ebrahim, CB Wishart, A Flower, GW Flower, GJ Whittall,
T Taibu, AM Blignaut, HH Streak (capt), SM Ervine, BA Murphy,
Douglas T Hondo.
CD McMillan, SP Fleming (capt), NJ Astle, CL Cairns, AR Adams,
SB Styris, CZ Harris, JDP Oram, DL Vettori, BB McCullum,
Umpires: DB Hair, RE Koertzen.