[ -1 split 0 peek char 0 - swap 0 swap witheach [ [ dup char 0 char 9 1+ within iff [ char 0 - ] done dup char A char Z 1+ within iff [ char A - 10 + ] done dup char * = iff [ drop 36 ] done dup char @ = iff [ drop 37 ] done dup char # = iff [ drop 38 ] done $ "Unexpected character '" swap join $ "' in CUSIP." join fail ] i^ 1 & if [ 2 * ] 10 /mod + + ] 10 mod 10 swap - 10 mod = ] is cusip ( $ --> b ) [ dup echo$ cusip iff [ say " is correct." ] else [ say " is incorrect." ] cr ] is task ( $ --> ) $ "037833100 17275R102 38259P508 594918104 68389X106 68389X105" nest$ witheach task