Sharing a quick macro for fanuc controls to verify tool lengths. It is set up for a 4 axis horizontal.
It would not take much to customize it for other setups. Other possibilities are using G31 and other hardware to actually measure tools. Also using radius comp to position at the cutting edge instead of the center of the tool.

Enjoy


Code:
%
O8099 (TOOL LENGTH CHECK)
( RUNS THROUGH ALL TOOLS WITH NON ZERO OFFSETS AND MOVES TO A POSITION SPECIFIED )
(SPECIFY THE COMPLETE LOCATION TO MOVE TO VIA VARIABLES IN THE PROGRAM)

G20 G90 G17
(SET VARIABLES)
#24=-10.0 (X TOUCH OFF POSITION)
#25=16.0 (Y TOUCH OFF POSITION)
#26=6.0 (Z TOUCH OFF POSITION)
#18=18.0 (Z CLEARANCE POSITION)
#2=0 (B ROTATION FOR TOUCH OFF POSITION)
#20=1 (TOOL POCKET COUNTER START VALUE)
#21=60 (MAX TOOL POCKET TO CHECK)

(------- ONLY CHANGE 11000 TO 10000 AS NEEDED BELOW THIS LINE --------)

(DO A LOOP THROUGH ALL TOOL NUMBERS)
(SKIP ONES THAT HAVE A ZERO OFFSET)
(GOTO SPECIFIED XYZB LOC)

N0010 
 T#20
 M6
G0 G54 X#24 Y#25 Z#18 B#2 (POSITION ABOVE MEASURE POINT AT Z CLEAR)
G1 Z#26 F100.0 (FEED DOWN TO LENGTH CHECK Z VALUE)
M0 (STOP TO CHECK TOOL LENGTH WITH A SPACER BLOCK AT A KNOWN Z ON THE TABLE OR PART)

G0 G54 Z#18

N0020
#20=#20+1
IF [#20 GT #21] GOTO 900 (FINISHED MEASURING ALL POCKETS)
IF [#[11000+#20] EQ 0] GOTO 20 (POCKET HAS ZERO TOOL LENGTH OFFSET - SKIP)
(--- CHANGE THE ABOVE LINE ACCORDING TO YOUR MACHINE ---)
(10000 IF TOOL OFFSET A - ONLY TOOL LENGTH OFFSET)
(11000 IF TOOL OFFSET B - TOOL LENGHT WEAR)
GOTO 10 (MEASURE NEXT TOOL)

N0900 (FINISHED)
M30
%