Files
freeCodeCamp/curriculum/challenges/german/10-coding-interview-prep/rosetta-code/cusip.md
2023-05-15 07:06:59 -07:00

119 lines
2.3 KiB
Markdown

---
id: 5a23c84252665b21eecc7e05
title: CUSIP
challengeType: 1
forumTopicId: 302241
dashedName: cusip
---
# --description--
Eine **CUSIP** ist ein neunstelliger alphanumerischer Code, der ein nordamerikanisches Finanzpapier zum Zwecke der Erleichterung des Clearings und der Abwicklung von Geschäften identifiziert. The CUSIP was adopted as an American National Standard under Accredited Standards X9.6.
# --instructions--
Write a function that takes a string as a parameter and checks if the string is valid CUSIP.
# --hints--
`isCusip` sollte eine Funktion sein.
```js
assert(typeof isCusip == 'function');
```
`isCusip("037833100")` sollte einen Boolean zurückgeben.
```js
assert(typeof isCusip('037833100') == 'boolean');
```
`isCusip("037833100")` sollte `true` zurückgeben.
```js
assert.equal(isCusip('037833100'), true);
```
`isCusip("17275R102")` sollte `true` zurückgeben.
```js
assert.equal(isCusip('17275R102'), true);
```
`isCusip("38259P50a")` sollte `false` zurückgeben.
```js
assert.equal(isCusip('38259P50a'), false);
```
`isCusip("38259P508")` sollte `true` zurückgeben.
```js
assert.equal(isCusip('38259P508'), true);
```
`isCusip("38259P50#")` sollte `false` zurückgeben.
```js
assert.equal(isCusip('38259P50#'), false);
```
`isCusip("68389X105")` sollte `true` zurückgeben.
```js
assert.equal(isCusip('68389X105'), true);
```
`isCusip("68389X106")` sollte `false` zurückgeben.
```js
assert.equal(isCusip('68389X106'), false);
```
`isCusip("5949181")` sollte `false` zurückgeben.
```js
assert.equal(isCusip('5949181'), false);
```
# --seed--
## --seed-contents--
```js
function isCusip(s) {
}
```
# --solutions--
```js
function isCusip(s) {
if (s.length != 9) return false;
var sum = 0;
var ASCII = x => x.charCodeAt(0);
for (var i = 0; i < 7; i++) {
var c = s.charCodeAt(i);
var v;
if (c >= ASCII('0') && c <= ASCII('9')) {
v = c - 48;
} else if (c >= ASCII('A') && c <= ASCII('Z')) {
v = c - 64; // lower case letters apparently invalid
} else if (c == ASCII('*')) {
v = 36;
} else if (c == ASCII('@')) {
v = 37;
} else if (c == ASCII('#')) {
v = 38;
} else {
return false;
}
if (i % 2 == 1) v *= 2; // check if odd as using 0-based indexing
sum += Math.floor(v / 10) + (v % 10);
}
return s.charCodeAt(8) - 48 == (10 - (sum % 10)) % 10;
}
```